如何在可变Java类中定义不可变对象?

时间:2016-06-18 15:15:33

标签: java oop object immutability

在一个类中,我想定义一个空对象并在需要它的任何地方使用它。该对象需要是不可变的,以避免意外修改。如果此对象被定义为类的public static final成员,则如果类本身是可变的,则可以更改该对象。

在可变类中创建不可变对象的好方法是什么?

2 个答案:

答案 0 :(得分:1)

如果你需要让一个类不可变,那么你需要满足这个要求:

  • 所有领域最终
  • 宣布为最终的类
  • 施工期间不允许逃避此参考
  • 任何引用可变数据对象的字段都是:
    • 私有
    • 没有setter方法
    • 他们永远不会直接退回,否则会被打电话给
    • 如果在课堂内部进行了更改,则此更改不可见,并且在课程
    • 之外无效

答案 1 :(得分:0)

如果你不能修改类使其成为不可变的(带有final字段的final类等),而不仅仅是自己写一个不可变的包装器(来自GOF的代理?)而是使用它。在里面它可以有一个原始类实例的委托。

相关问题