使对象在Groovy中不可变

Bre*_*ako 4 groovy immutability

在Groovy中,我可以通过以下操作使对象不可变:

@Immutable 
class MyObject {
   ...
}
Run Code Online (Sandbox Code Playgroud)

但是,如果MyObject具有对可变对象的引用,例如

@Immutable 
class MyObject {
    MutableObject mutableObject
}
Run Code Online (Sandbox Code Playgroud)

我不能 我得到:

classes only support properties with effectively immutable types including
Run Code Online (Sandbox Code Playgroud)

但是,即使myObject具有MutableObject,对其的引用也永远不会改变。

有什么我可以做的,以使其MyObject尽可能不变?

tim*_*tes 5

如果您确定这MutableObject实际上是一成不变的,则可以这样做

@Immutable( knownImmutableClasses=[ MutableObject ] )
class MyObject {
    MutableObject mutableObject
}
Run Code Online (Sandbox Code Playgroud)

显然,如果这是一个谎言并且mutableObject发生突变,则必须小心;-)