使用 final 关键字声明一个列表字段

新手上路,请多包涵

如果我在一个类中有以下语句,其中 Synapse 是一个抽象类型:

 private final List<Synapse> synapses;

Does final allow me to still be able to change the state of the Synapse objects in the List , but prevent me from adding new Synapse 对象列表?如果我错了,你能解释一下 final 正在做什么以及我应该在什么时候使用关键字 final 代替。

原文由 letter Q 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 642
2 个回答

不,final 关键字不会使列表或其内容不可变。如果你想要一个不可变的列表,你应该使用:

 List<Synapse> unmodifiableList = Collections.unmodifiableList(synapses);

final 关键字的作用是阻止您为“synapses”变量分配新值。也就是说,你不能写:

 final List<Synapse> synapses = createList();
synapses = createNewList();

但是,您可以这样写:

 List<Synapse> synapses = createList();
synapses = createNewList();

本质上,您仍然可以更改、添加和删除列表的内容,但不能创建分配给变量 synapses 的新列表。

原文由 Mark P. 发布,翻译遵循 CC BY-SA 4.0 许可协议

final 阻止您 重新分配 synapses 在您分配一次之后 - 您仍然可以像往常一样添加/删除元素。您可以 在此处 阅读有关 final 关键字的更多信息。

原文由 arshajii 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题