返回一个不可修改的列表是个好主意。但是,在调用 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;
}
}