私は Groovy (私にとっては新しい) を使用して、Java 値オブジェクト クラスを Groovy と同等のものに置き換え、残りの Java コードベースとの互換性を維持しながら、よりクリーンで簡潔なコードを取得しようとしています。(この試行が失敗した場合、Google にフォールバックする可能性があります@AutoValue
。)
値オブジェクトは、ビルダー パターンを使用して Java コードからインスタンス化できます。セッター メソッドはプレフィックスなしである必要があり、理想的にはビルダーは、構成可能な名前を持つ静的メソッドを介してインスタンス化できる必要があります。
@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
(開こうとしても反応しません)。