Lombokが便利すぎて、わろた!!!!
Javaで開発していて、不満はいろいろあるんですが、その不満の大部分を解消してくれるライブラリーがあるので、紹介しちゃいます。
その名もLombokと言われるライブラリー。
ダウンロードしたい方はこちら
個人的にJavaの欠陥と思っている以下内容を楽に解決してくれちゃいます。
- equalsメソッドがそのままでは使い物にならない。
- equalsメソッドをオーバーライドしたら、hashcodeメソッドもオーバーライドする必要あり。
- toStringメソッドがそのままでは使い物にならない。
- ゲッター、セッターを毎回用意する必要がある。
実際、Lombokで書かれたコードはこんな感じ。 めんどくさいコードが全てアノテーションを付与することによって、実現できちゃいます。
@ToString(includeFieldNames=false) @EqualsAndHashCode public final class FullName { @Setter @Getter private final String value; }
上記以外で便利な機能としては、「@AllArgsConstructor」アノテーションがある。 これは、クラスのフィールドに定義された全てのフィールドに対応したコンストラクタを用意します。
個人的な使い方の基本方針としては、以下。
- @ToStringは全クラスに付与。
- @EqualsAndHashCodeはValueクラスに相当するクラスに付与。 厳密に記載すると、論理的等価性が必要なクラスだな。
- @Setterは不変性を維持できないので、未使用。そもそもセッターメソッドも用意しない。
- @Getterは必要に応じて。注意点としては、参照型のクラスをLombokのゲッターメソッドにすると、不変性が担保できない可能性があるので、独自にゲッターメソッドを用意する。そもそも、ゲッターメソッドを用意している場合は、ロジックがクライアント側に漏れていないことが前提。 この話はオブジェクト指向に関連するので、別途。
- @AllArgsConstructorはフィールドを保持しているクラスに付与。
これ以外にも事前に用意されたアノテーションはたくさんあるが、危なそうなので、使わない。
以上、簡単でしたが、Lombokに使い方でした。