我正在尝试使用 Groovy(这对我来说是新的)用 Groovy 等价物替换 Java 值对象类,从而获得更简洁的代码,同时保持与 Java 代码库的其余部分兼容。(如果这次尝试失败,我可能会退回到谷歌@AutoValue
。)
值对象应保持可使用构建器模式从 Java 代码实例化。setter 方法应该没有前缀,理想情况下,构建器应该可以通过具有可配置名称的静态方法进行实例化。
@groovy.transform.builder.Builder
的 Javadoc 提到它可以在“如果你需要 Java 集成”时使用,我看到它也有配置参数,看起来很有希望,但我没有弄清楚如何从 Java 代码中使用它。
这是一个尝试,我不知道用什么代替 X:
问候.groovy:
import groovy.transform.Immutable
import groovy.transform.builder.Builder
@Immutable
@Builder
public class GroovyGreeting {
String message
}
GroovyGreetingTest.java:
GroovyGreeting g = X.message("foo").build();
编辑:生成 2 个类,target/classes/com/hello/GroovyGreeting.class
并且target/classes/com/hello/GroovyGreeting$com/hello/GroovyGreetingBuilder.class
. 那里的'$' 真的很奇怪并且阻止引用它(import com.hello.GroovyGreeting$com.hello.GroovyGreetingBuilder
是非法的)。同样出于某种原因,在 IntelliJ IDEA 中我可以反编译GroovyGreetingBuilder.class
但不能GroovyGreeting.class
(尝试打开它时没有反应)。