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に使い方でした。