final public class ImmutableWithObject {
final Object obj;
final List myList;
ImmutableWithObject(Object obj1, List list)
{
this.obj = obj1;
this.myList = ((List) ((ArrayList) list).clone());
}
public Object getObj() {
return this.obj;
}
public List getMyList() {
return (List) ((ArrayList<String>) this.myList).clone();
}
public static void main(String[] args) {
ImmutableWithObject io = new ImmutableWithObject(new Date(), new ArrayList());
((Date) io.getObj()).setDate(22);
System.out.println((Date) io.getObj());
}
}
o/p : Mon Aug 22 00:50:04 IST 2011
这是不正确的。
最佳答案
不可变意味着一旦对象被构建,它的状态就不会改变。
- 完成类(class)(您已经完成)
- 将实例变量设为私有(private)和最终
- 不要提供改变状态的方法
- 传递实例变量时,发送副本而不是原始变量。
来自 EJ Item 15 <-- 里面有很多信息
类应该是不可变的,除非有很好的理由让它们可变。如果不能使类不可变,请尽可能限制其可变性。
关于java - 如果类具有 java.lang.Object 的实例变量,我如何使它成为不可变的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7126138/