使用最终关键字声明 List 字段

2022-09-01 08:08:55

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

private final List<Synapse> synapses;

是否允许我仍然能够更改 中对象的状态,但阻止我向列表中添加新对象?如果我错了,你能解释一下我在做什么,以及我什么时候应该使用这个关键字。finalSynapseListSynapsefinalfinal


答案 1

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

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

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

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

但是,您可以编写:

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

在 essense 中,您仍然可以更改、添加和删除列表的内容,但不能创建分配给变量突触的新列表。


答案 2

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