我想用Groovy(对我来说是新的)来替换Java值对象类,并获得更清洁、更简洁的代码,同时保持与Java代码库的兼容性。(如果此尝试失败,我可能会退回到Google @AutoValue
。)
值对象应该可以使用构建器模式从Java代码中实例化。setter方法不应有前缀,最好可以通过静态方法来实例化构建器并配置名称。
@groovy.transform.builder.Builder
的Javadoc提到它可以用于“需要Java集成”的情况,我也看到它有配置参数,这看起来很有前途,但我还没有弄清楚如何从Java代码中使用它。
下面是一种尝试,其中我不知道要用什么替换X:
Greeting.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
(尝试打开时没有反应)。
GroovyGreeting.builder().message("foo").build()
了吗? - tim_yates