返回一个不可修改的列表是一个好主意。但是,在调用getter方法期间无法修改的列表仍可以由该类或从该类派生的类来更改。
相反,您应该向扩展类的任何人明确表示不应该修改列表。
因此,在您的示例中,它可能导致以下代码:
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Test {
public static final List<String> STRINGS =
Collections.unmodifiableList(
Arrays.asList("1", "2"));
public final List<String> getStrings() {
return STRINGS;
}
}
在上面的示例中,我将 STRINGS
字段公开,原则上您可以取消方法调用,因为这些值是已知的。
您也可以将字符串分配给private final List<String>
在构造类实例期间不可修改的字段。使用(构造函数的)常量或实例化参数取决于类的设计。
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Test {
private final List<String> strings;
public Test(final String ... strings) {
this.strings = Collections.unmodifiableList(Arrays
.asList(strings));
}
public final List<String> getStrings() {
return strings;
}
}
final
确实阻止了该字段的修改。但是,防止Object
由字段引用的修改更复杂。