[Java]Lombokでコードを短縮させる。
はじめに
Javaでコードを書いていると毎回必ず必要になるメソッドが有りますが、ちょっと面倒だな〜と感じることは無いでしょうか。 そこで使えるのがlombokというライブラリです。
環境
Mac OSX 10.10.5 Yosemite Eclipse 4.5.2 Mars Java 8
インストール
まずlombokのサイトからjarファイルをダウンロードします。 Project Lombok - Download
jarファイルはインストーラーになっているので、実行したら下記画面で対象のIDEを選択します。 ところが、Mac環境だとすんなり進ま無い事が有りますので、該当した方は下記の設定を行ってください。 参考:eclipse mars on mac で lombok インストーラが動かない時の対処法 Eclipseの「パッケージの内容を表示」から、/Eclipse.app/Contents/MacOSにlombok.jarを配置、 /Eclipse.app/Contents/Eclipse/eclipse.iniの最後に下記を追加して起動するだけです。
-javaagent:lombok.jar -Xbootclasspath/a:lombok.jar
初回は念のためターミナルから-cleanで起動しました。
使い方
通常はこの様に書いたりします。 内容は、フィールド変数、デフォルトコンストラクタ、コンストラクタ、ゲッター、セッターです。
public class Test { private String id; private String number; // デフォルトコンストラクタ public Test() { } // コンストラクタ public Test(String id, String number) { this.id = id; this.number = number; } // 以下、ゲッター/セッター public String getId() { return id; } public void setId(String id) { this.id = id; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } }
lombokを使うとこんなに短くなります。
import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @AllArgsConstructor @NoArgsConstructor public class Test { @Getter @Setter private String id; @Getter @Setter private String number; }
@AllArgsConstructor | フィールドの変数(idとnumber)を引数にしたコンストラクタが自動的に生成されます。 |
---|---|
@NoArgsConstructor | 引数を持たないデフォルトコンストラクタが自動的に生成されます。 |
@Getter | Getter生成。変数ごとに設定できます。クラスにアノテートすると全フィールド変数が対象になります。 |
@Setter | Setter生成。使い方はGetterと同様ですが、finalではない事が条件。 |
試しに使えるか確認してみます。
Test test = new Test(); test.setId("aaa"); test.getNumber();
@Data
Dataというアノテーションをクラス名の上に記述すると、下記のアノテーションの機能を持たせてくれます。
@Getter | Getter生成。変数ごとに設定できます。クラスにアノテートすると全フィールド変数が対象になります。 |
---|---|
@Setter | Setter生成。使い方はGetterと同様ですが、finalではない事が条件。 |
@RequiredArgsConstructor | 初期化が必要なフィールド変数を引数にしたコンストラクタを生成。 |
@ToString | フィールド変数を表示するtoString()を設定。 |
@EqualsAndHashCode | eaualsとhashCodeを生成。 |
使ってみるとこんなに短くなりました。
import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class Test { private String id; private String number; }
さいごに
コードは長くなる一方なのでlombokなどのライブラリを使用して冗長的にならない様にしたいですね。 導入編的に進めましたが、次回は別のアノテーションも紹介しようと思います。