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());
}
}
Run Code Online (Sandbox Code Playgroud)
o/p : Mon Aug 22 00:50:04 IST 2011
Run Code Online (Sandbox Code Playgroud)
哪个不对.
不可变意味着一旦构造了对象,其状态就不会改变.
从EJ项目15 < - 更多信息在那里
类应该是不可变的,除非有一个很好的理由使它们变得可变.如果一个类不能成为不可变的,那么尽可能地限制它的可变性.
您不能使其不可变,因为该对象无法创建列表或对象内容的副本。假设您打算使用 getter 来访问这些属性,那么属性本身是在其他地方创建的,并且可以在引用该属性的此类外部的代码中进行更改。
唯一的例外是 Object 和 List 的内容本身是不可变的。然后您可以创建列表的不可变副本,这样就完成了。
| 归档时间: |
|
| 查看次数: |
2944 次 |
| 最近记录: |