수정 불가능한 목록을 반환하는 것이 좋습니다. 그러나 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