我正在尝试在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.
根据互联网上发现的一些帖子,这应该有效。 为什么失败怎么能在使用最终字段时通过地图设置属性?
答案 0 :(得分:8)
您可以使用@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
答案 1 :(得分:2)
我不知道为什么带有Map参数的构造函数不起作用,但是这个构造函数执行:
class Foo {
final x
Foo(x) {
this.x = x
}
}
def foo = new Foo(1)