最近、Java 開発者の役割のインタビューで、クラス B のオブジェクトであるメンバー変数があり、クラス B がプロジェクトの外部にあり、編集できない状況で、クラス A を不変にする方法を尋ねられました。さらに、プログラマーはクラス B に、別のユーザー定義クラスのオブジェクトである独自のメンバー変数を持つことさえあります。よく考えて、クラス B がディープ クローン自体のメソッドを実装して公開しない限り、方法はないとインタビュアーに伝えました。
しかし、インタビュアーは納得していませんでした。そのようなクラスを不変にする方法は本当にありますか?
私の記憶が正しければ、これが彼が説明した状況でした。彼は私にクラス A を不変にすることを望んでいました。
final public class A {
final private B b;
A(B b) {
this.b = b; // Class b might/might not be cloneable
// this.b = (B)b.clone();
}
public B getB() {
return b;
// return (B)b.clone();
}
}
class B // external cannot edit
{
C c;
public C getC() {
return c;
}
public void setC(C c) {
this.c = c;
}
}
class C // external cannot edit
{
int i;
String j;
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public String getJ() {
return j;
}
public void setJ(String j) {
this.j = j;
}
}