grails - Groovy 和 final 属性如何用 Map 设置?

标签 grails groovy

我正在尝试在 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/

相关文章:

mysql - Grails 删除孤儿多对多关系

reflection - 在 Groovy 中找出方法的名称

grails - 如何通过 Grails 中的继承类中的映射构造函数设置属性?

grails - grails:在实例上使用 “count()”代替

grails - Grails应用程序在域类构建时抛出ConversionNotSupportedException

java - 在Grails中导入/使用Java类

groovy - groovy:如何将所有 ')'替换为 ' '

grails - 完全禁用javamelody grails插件

java - Jackson XmlMapper 将XML转换为POJO,节点文本的键是 ""

java - 嵌入式 Groovy : How to use static type checking with external variables?