ロンボクの代替品を知っていますか? Lombokを使用すると、ゲッターとセッターとtoString
でクラスをいじることを忘れることができます。自分のプロジェクトで使用したいのですが、もっと良い代替案があるのでしょうか。
Java= 1.7を使用しており、1.8に変更できません。
恐れ入りますが、 Scala のようなものに切り替えたい場合、または AutoValue によって提供されるような機能の小さなセットに満足しない限り、代替手段はありません。
AutoValue
はおそらくピュアJavaで実現できる最高のものですが、
しかし、それは逃します
不変性は美徳であることに強く同意しますが、それが適用できない場合もあります。とにかく、ロンボクは不変性をサポートするために一生懸命努力し、グアバの不変コレクションとさえ統合します、そしてあなたは書くことができます
@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
はかなりクールです。前者は単一のフィールドが異なるコピーを作成することを可能にし、後者は現在の値から始めて複数のフィールドを変更するのに適したビルダーを提供します。次の2行は同等です。
o.withA(1).withB(2)
o.toBuilder().a(1).b(2).build()
LombokとAutoValue
はどちらも魔法を使います。後者の魔法は標準の注釈処理なので、非常に堅牢です。 27ページ にリストされているように、いくつかの欠点があります。注文しなかったAutoValue_fooが生成されるという事実を追加します。
ロンボクはいくつかの黒魔術を使用しているため、はるかに壊れやすくなっていますが、より多くのものを提供し、かなりうまく機能します。
「より良い」はここではかなり論争ですが、1つの代替案は AutoValue であり、利用可能です here 。 このプレゼンテーション は、AutoValueとの違いのいくつかを説明しています。ロンボク。
特に、AutoValueは不変性(一般的に良いことです!)と最小限の言語外の魔法(Lombokとは非常に異なります)を強調しています。