不変クラスを構築したい場合は、非 final フィールドへの参照を公開しないでください。ただし、 Strings のような不変オブジェクトの場合でも?
public final class Test { // Test class is meant to be immutable
private String s; // CAN'T MAKE THIS FINAL
void onCreate(String s) { // a callback called ONCE after construction
this.s = new String(s); // do I need to do this ? (protect me from me)
}
public String getS() {
return new String(s); //do I need to do this ?(protect me from the world)
}
}