我正在编写一个不可变类。其中一个实例是另一个可变类的对象。如何防止修改该实例的状态。Java不可变类疑问
回答
如果您向所有获得者提供委托,但不为该字段本身提供获取者。例如:
public final class Foo {
private Bar bar;
public String getBarField1() {
return bar.getBarField1();
}
public String getBarField2() {
return bar.getBarField2();
}
}
但有一点需要考虑 - 该领域是如何创建的。如果它在构造函数中传递,那么您必须创建它的副本而不是获取传递的对象,否则创建代码将引用Bar
实例并能够修改它。
还应限制继承。所以,有必要让班级最终成为现实。 – 2011-05-05 08:22:48
同意。 (15chrs) – Bozho 2011-05-05 08:23:20
- 使可变私人
- 仅允许经由吸气剂(
getVarNameProperty1()
,getVarNameProperty2()
)获得变量的字段; - 为了拒绝继承,使类最终。在孩子阶级中,可以创建一个公共获取者。
您不能允许访问具有getter的变量。 getters将返回对变量的引用,这将允许更改不可变内部状态。 变量必须在内部锁定。 – 2011-05-05 08:50:33
- 1. Java - LinkedList疑问
- 2. Java OutOfMemoryError疑问
- 3. Java不可变类?
- 4. Java线程疑问
- 5. java程序疑问
- 6. Java io.FileNotFoundException;可疑端口问题
- 7. 使Java类不可变
- 8. java中的不可变类
- 9. Java类不可访问
- 10. Java递归例程疑问
- 11. Java - keyTyped疑难问题
- 12. Java继承有疑问
- 13. 抽象类中的疑问
- 14. 类图 - 可疑有用吗?
- 15. 与易失性,不可变对象有关的疑问以及它们用于实现同步的疑问
- 16. Java可变问题
- 17. 对基类访问的疑问
- 18. java中的所有不可变类型
- 19. Groovy @ Java中的不可变类
- 20. 是我的Java类不可变
- 21. java不可改变的对象问题
- 22. 疑问
- 23. 可变和不可变类
- 24. 可变或不可变类?
- 25. Java的:当你选择,让您的类不可变了可变
- 26. Java SE 7中不可变类型的可变参数 - 如何?
- 27. 参考可变类的不可变类
- 28. 不可变类
- 29. Java override怀疑
- 30. java finalization疑惑
你能详细点吗?你的解释是自相矛盾的。如果它是一个不可变类,那里面没有可变变量。 – Ingo 2011-05-05 08:21:17
请参阅我编辑的问题 – Ammu 2011-05-05 08:23:23