【发布时间】:2019-06-13 08:14:36
【问题描述】:
我有以下对象用来自 Lombok 的 @Value 注释:
@Value
public class Foo {
private final boolean bar;
private final boolean baz;
private final boolean boo;
}
我尝试从 groovy 测试中实例化 Foo:
new Foo(bar: true, baz: false, boo: true)
但我收到警告:
Constructor 'Foo' cannot be applied to '()'
在运行时出现以下错误:
Cannot set readonly property: bar for a class: Foo
有没有办法在 groovy 中使用命名构造函数来调用带有所有参数的构造函数,而不是调用空构造函数然后尝试设置字段?
【问题讨论】:
-
您的
Foo课程是否有无参数控制器? Groovy 编译def f = new Foo(bar:baz)的方式基本上是def f = new Foo(); f.bar = baz(groovy 中没有命名参数,它只是传递一个Map) -
Groovy 内置了@Immutable 注解,你应该使用它来创建构造函数。