最近在 Java 开发人员角色的采访中,有人问我如何使 Class A 不可变,如果它有一个成员变量,它是 Class B 的一个对象,并且在 Class B 是项目外部并且不能被编辑的情况下程序员此外 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;
}
}