MyT*_*tle 61 java final arraylist
通过使ArrayList(或其他Collection)最终获得哪些优点/缺点?我仍然可以添加ArrayList新元素,删除元素并更新它.但是什么影响使它成为最终的?
NPE*_*NPE 123
但是什么影响使它成为最终的?
这意味着您无法重新绑定变量以指向其他集合实例:
final List<Integer> list = new ArrayList<Integer>();
list = new ArrayList<Integer>(); // Since `list' is final, this won't compile
Run Code Online (Sandbox Code Playgroud)
作为一种风格问题,我声明大多数我不打算改变的引用final.
我仍然可以添加ArrayList新元素,删除元素并更新它.
如果您愿意,可以使用Collections.unmodifiableList()以下方法阻止插入,移除等:
final List<Integer> list = Collections.unmodifiableList(new ArrayList<Integer>(...));
Run Code Online (Sandbox Code Playgroud)
ada*_*shr 14
它只是意味着您无法重新分配其引用.尝试执行类似下面的操作将导致编译器错误.
final List<String> list = new ArrayList<String>();
list = new LinkedList<String>();
^
Compiler error here
Run Code Online (Sandbox Code Playgroud)
如果您真的想要一个不可变列表,则应该使用该Collections.unmodifiableList()方法.
创建变量final可确保在分配后不能重新分配该objest引用.如您所述,您仍然可以使用该列表方法进行更改.
如果将final关键字与Collections.unmodifiableList结合使用,则可以实现您可能尝试实现的行为,例如:
final List fixedList = Collections.unmodifiableList(someList);
Run Code Online (Sandbox Code Playgroud)
这导致fixedList无法更改指向的列表.但要注意它仍然可以通过someList引用进行更改(因此请确保在此对齐后它超出范围.)