【发布时间】:2014-12-16 19:07:33
【问题描述】:
要使类不可变,我可以做的是:
1) 使类最终
2)不提供setter
3)将所有变量标记为final
但是,如果我的班级有其他班级的另一个对象,那么某人可以更改该对象的值
class MyClass{
final int a;
final OtherClass other
MyClass(int a ,OtherClass other){
this.a = a;
this.other = other;
}
int getA(){
return a;
}
OtherClass getOther(){
return other;
}
public static void main(String ags[]){
MyClass m = new Myclass(1,new OtherClass);
Other o = m.getOther();
o.setSomething(xyz) ; //This is the problem ,How to prevent this?
}
}
【问题讨论】:
-
@LuiggiMendoza,我认为 Other/OtherClass 应该是一个他无法控制的类。
-
为另一个类写一个包装器,只做getter。
-
@LuiggiMendoza - 这是行不通的,因为一旦您引用了 OtherClass 中的数据,您仍然可以更改它。这意味着您需要确保此不可变对象使用的所有类都没有设置器。
-
@user93796 您无法控制其他对象。您可以使
MyClass完全不可变,但我不确定如果您无权访问它,如何使Other不可变。 -
@Nican - 这是一个好方法!
标签: java object immutability