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
这是不正确的。
最佳答案
你不能让它不可变,因为这个对象不能创建列表或对象内容的副本。假设您打算使用 getter 来访问这些属性,那么这些属性本身是在别处创建的,并且可以在引用该类的外部代码中进行更改。
唯一的异常(exception)是 Object 和 List 的内容本身是不可变的。然后你可以创建一个不可变的列表副本,你就完成了。
关于java - 如果类具有 java.lang.Object 的实例变量,我如何使类不可变?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7126138/