我正在尝试在 Groovy 源代码中设置最终属性(在 Grails 项目中使用)并遵循一些示例,但不知何故我似乎不起作用,我无法找出原因..
class Foo {
final x
Foo(Map m=[:]) {
m.each { key, value -> this.@"$key" = value }
}
}
def foo = new Foo(x:1)
我收到错误:
Cannot set the property 'x' because the backing field is final.
根据在互联网上找到的一些帖子,这应该有效。
为什么在使用 final 字段时失败,如何通过 map 设置属性?
最佳答案
您可以通过使用 @Immutable 注释来实现您所寻求的结果
@Immutable
class Foo {
def x
}
那么这可以称为
def foo = new Foo([:])
或者
def foo = new Foo(x:42)
然后后来
foo.x = 43
原因
ERROR groovy.lang.ReadOnlyPropertyException:
Cannot set readonly property: y for class: Foo
关于grails - Groovy 和 final 属性如何用 Map 设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7738134/