[英]Call Groovy builder from Java
我正在嘗試使用Groovy(對我來說是新手)用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
(嘗試打開它時沒有反應)。
我有完全相同的問題。 在研究了構建器策略的代碼之后,我設法通過顯式指定builderClassName使其工作。
package alfa.beta
@Builder(builderClassName = 'PageLayoutBuilder')
class PageLayout
我現在可以看到生成的構建器是alfa / beta / PageLayout $ PageLayoutBuilder。
我為此提交了一份JIRA問題GROOVY-7501。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.