关于clienthandlerList应该是不可变
来源:10-8 服务器消息调度逻辑规范化-3
慕尼黑3917127
2019-02-24
视频这个12:00说了clientHandlerList应该是不可变的。这个是什么原因?
写回答
1回答
-
多谢反馈,我看了一下视频,发现可能是我的表述问题让你引起了误解。
在这里并非说:clientHandlerList这个list的内容不可变,其内容是可变的,比如可以往里边加数据也可以删除数据,这里的数据就是ClientHandler对象.
在课程说的不可变是说clientHandlerList这个变量不可变。
clientHandlerList是一个变量,咱们申明为final,是为了防止在后续的代码中无意中将clientHandlerList变量重新赋值。
这个变量是一个List集合,转载的是一系列的ClientHandler对象实例。这个集合通过new ArrayList<>()得到。
如果在后续的操作中无意中将clientHandlerList又进行了一次:
clientHandlerList = new ArrayList<>()
那么clientHandlerList变量对应的集合就变了,如果之前的ClientHandler对象是存储在第一个集合,那么此时新的集合将没有包含上述的ClientHandler对象了,也就导致程序运行异常。
我们为了避免这样的情况所以加上final。这里是为了保证:clientHandlerList 变量对应的集合实例不变,但集合内存储的ClientHandler对象是可以增加删除的。
112019-02-24
相似问题