Подтвердить что ты не робот

Альтернативы Lombok для четкого кода без getters/seters/toString/constructors

Знаете ли вы какие-либо альтернативы Ломбока? Используя Lombok, мы можем забыть о классе messing с getters и seters и toString, я хочу использовать его в своем проекте, но мне интересно, есть ли какие-то лучшие альтернативы?

Я использую Java 1.7.. и не могу изменить на 1.8.

4b9b3361

Ответ 1

Я боюсь, нет альтернативы, если вы не захотите переключиться на нечто вроде Scala или довольны меньшим набором функции, подобные тем, которые предоставляются AutoValue.

Хотя AutoValue, вероятно, лучше всего подходит для чистой Java, он предлагает

  • @Getter
  • @AllArgsConstructor
  • @EqualsAndHashCode
  • @ToString
  • @Builder

но он пропускает

  • @Wither
  • toBuilder
  • @Setter
  • @Delegate
  • @ExtensionMethod
  • и некоторые другие функции, которые я не использую.

Хотя я твердо согласен с тем, что неизменность является добродетелью, иногда она неприменима. Во всяком случае, Ломбок старается поддерживать неизменность, даже интегрируется с гуавы неизменных коллекции, и вы можете написать

@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 генерируются, которые я не заказывал.

Ломбок использует черную магию и, следовательно, гораздо более хрупкий, но он предлагает больше и работает очень хорошо.

Ответ 2

"Лучше" является довольно спорным здесь, но одна альтернатива Автозначение, доступны . Эта презентация объясняет некоторые различия между AutoValue и, например, Ломбок.

В частности, AutoValue подчеркивает неизменность (хорошая вещь, как правило!) и минимальная экстралингвистическая магия (очень отличная от Ломбока).