在Groovy中使对象不可变

在Groovy中使对象不可变,groovy,immutability,Groovy,Immutability,在Groovy中,我可以通过以下操作使对象不可变: @Immutable class MyObject { ... } 但是,如果MyObject引用了一个可变对象,如 @Immutable class MyObject { MutableObject mutableObject } 我不能。我得到: classes only support properties with effectively immutable types including 但是,即使myObje

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

@Immutable 
class MyObject {
   ...
}
但是,如果MyObject引用了一个可变对象,如

@Immutable 
class MyObject {
    MutableObject mutableObject
}
我不能。我得到:

classes only support properties with effectively immutable types including
但是,即使myObject有一个可变对象,对它的引用也永远不会改变


我能做些什么来使
MyObject
尽可能不可变吗?

如果您确信
MutableObject
实际上是不可变的,那么您可以这样做

@Immutable( knownImmutableClasses=[ MutableObject ] )
class MyObject {
    MutableObject mutableObject
}
显然,如果这是一个谎言,并且可变对象发生变异,则必须小心;-)