Я пытаюсь использовать Groovy (что для меня ново), чтобы заменить классы объектов значений Java эквивалентом Groovy и, таким образом, получить более чистый и лаконичный код, оставаясь при этом совместимым с остальной кодовой базой Java. (если эта попытка не увенчается успехом, я могу вернуться к Google @AutoValue
.)
Объекты значений должны оставаться доступными для создания из кода Java с использованием шаблона построителя. Методы установки должны быть без префикса, и в идеале построитель должен создаваться с помощью статического метода с настраиваемым именем.
В Javadoc @groovy.transform.builder.Builder
упоминается, что его можно использовать, «если вам нужна интеграция с 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
(никакой реакции при попытке открыть).
GroovyGreeting.builder().message("foo").build()
? - person tim_yates   schedule 08.04.2015