簡體   English   中英

從Java調用Groovy構建器

[英]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.classtarget/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM