如何在可变Java类中定义不可变对象?
在一个类中,我想定义一个空对象,并在我们需要它的任何地方使用它。此对象需要是不可变的,以避免意外修改。如果此对象定义为类的如何在可变Java类中定义不可变对象?,java,oop,object,immutability,Java,Oop,Object,Immutability,在一个类中,我想定义一个空对象,并在我们需要它的任何地方使用它。此对象需要是不可变的,以避免意外修改。如果此对象定义为类的公共静态final成员,则如果类本身是可变的,则可以更改该对象 在可变类中创建不可变对象的好方法是什么?如果您无法修改该类使其不可变(最终类带有最终字段等),那么只需编写一个不可变包装器(来自GOF的代理?)并使用它即可。它内部可以有一个对原始类实例的委托。如果需要使类不可变,则需要满足以下要求: 所有字段都是最终字段 该类被宣布为最终类 在施工期间,不允许逃逸此参考 引用
公共静态final
成员,则如果类本身是可变的,则可以更改该对象
在可变类中创建不可变对象的好方法是什么?如果您无法修改该类使其不可变(最终类带有最终字段等),那么只需编写一个不可变包装器(来自GOF的代理?)并使用它即可。它内部可以有一个对原始类实例的委托。如果需要使类不可变,则需要满足以下要求:
- 所有字段都是最终字段
- 该类被宣布为最终类
- 在施工期间,不允许逃逸此参考
- 引用可变数据对象的任何字段包括:
- 私人的
- 没有setter方法
- 它们不会直接返回,否则会暴露给调用方
- 如果它们在类内部更改,则此更改不可见,并且在类外部没有影响