在Groovy中使一个对象不可变

4

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

@Immutable 
class MyObject {
   ...
}

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

@Immutable 
class MyObject {
    MutableObject mutableObject
}

我做不到。会得到以下错误:

classes only support properties with effectively immutable types including

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

有没有什么方法可以尽可能地使MyObject成为不可变的?

1个回答

5
如果您确定MutableObject在实际上是不可变的,那么您可以执行以下操作:
@Immutable( knownImmutableClasses=[ MutableObject ] )
class MyObject {
    MutableObject mutableObject
}

显然,如果这是一个谎言并且mutableObject会发生变化,就必须小心处理;-)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接