Боюсь, альтернативы нет, если только вы не хотите переключиться на что-то вроде Scala или вас устраивает меньший набор функций, подобных тем, которые предоставляет AutoValue.
Хотя AutoValue
, вероятно, лучшее, что вы можете получить с чистой Java, она предлагает
- @Геттер
- @AllArgsConstructor
- @EqualsAndHashCode
- @Нанизывать
- @Строитель
но он пропускает
- @Увядание
- toBuilder
- @Сеттер
- @делегат
- @ExtensionMethod
- и еще некоторые функции, которыми я не пользуюсь.
Хотя я полностью согласен с тем, что неизменность — это достоинство, иногда это неприменимо. В любом случае, Lombok изо всех сил старается поддерживать неизменяемость, он даже интегрируется с неизменяемыми коллекциями Guava, и вы можете написать
@Builder @Getter public final class Sentence {
private final boolean truthValue;
@Singular private final ImmutableList<String> words;
}
и использовать его как
Sentence s = Sentence.builder().truthValue(true)
.word("Lombok").word("is").word("cool").build();
assertEquals(3, s.getWords().size());
Примечание: я не автор, поэтому могу сказать, что это круто.
Для неизменяемых @Wither
и toBuilder
довольно крутые. Первый позволяет создать копию, отличающуюся одним полем, а второй дает вам конструктор, начинающийся с текущих значений и подходящий для изменения нескольких полей. Следующие две строки эквивалентны:
o.withA(1).withB(2)
o.toBuilder().a(1).b(2).build()
И Ломбок, и AutoValue
используют магию. Магия последнего заключается в стандартной обработке аннотаций, поэтому она довольно надежна. Он имеет некоторые недостатки, перечисленные на стр. 27. . Я бы добавил тот факт, что генерируется некоторый AutoValue_foo, который я не заказывал.
Ломбок использует некоторую черную магию и, таким образом, гораздо более хрупок, но предлагает больше и работает довольно хорошо.
person
maaartinus
schedule
12.02.2014