关于clienthandlerList应该是不可变

来源:10-8 服务器消息调度逻辑规范化-3

慕尼黑3917127

2019-02-24

视频这个12:00说了clientHandlerList应该是不可变的。这个是什么原因?

写回答

1回答

Qiujuer

2019-02-24

多谢反馈,我看了一下视频,发现可能是我的表述问题让你引起了误解。

//img.mukewang.com/szimg/5c722df30001105513840870.jpg

在这里并非说:clientHandlerList这个list的内容不可变,其内容是可变的,比如可以往里边加数据也可以删除数据,这里的数据就是ClientHandler对象.


在课程说的不可变是说clientHandlerList这个变量不可变。


clientHandlerList是一个变量,咱们申明为final,是为了防止在后续的代码中无意中将clientHandlerList变量重新赋值。


这个变量是一个List集合,转载的是一系列的ClientHandler对象实例。这个集合通过new ArrayList<>()得到。


如果在后续的操作中无意中将clientHandlerList又进行了一次:

clientHandlerList = new ArrayList<>()        

那么clientHandlerList变量对应的集合就变了,如果之前的ClientHandler对象是存储在第一个集合,那么此时新的集合将没有包含上述的ClientHandler对象了,也就导致程序运行异常。


我们为了避免这样的情况所以加上final。这里是为了保证:clientHandlerList 变量对应的集合实例不变,但集合内存储的ClientHandler对象是可以增加删除的。


1
1
慕尼黑3917127
非常感谢!了解了,这块final的问题我知道了,只是平常对这个编码中不是很规范,所以不是很注意
2019-02-24
共1条回复

Socket网络编程进阶与实战 系统掌握Socket核心技术

理论+实践,系统且深入掌握Socket核心技术,从容应对各种Socket应用场景的不二之选

2314 学习 · 476 问题

查看课程