[Java]Lombokでコードを短縮させる。

2016.07.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

Javaでコードを書いていると毎回必ず必要になるメソッドが有りますが、ちょっと面倒だな〜と感じることは無いでしょうか。
そこで使えるのがlombokというライブラリです。

環境

Mac OSX 10.10.5  Yosemite
Eclipse 4.5.2 Mars
Java 8

インストール

まずlombokのサイトからjarファイルをダウンロードします。
Project Lombok - Download

jarファイルはインストーラーになっているので、実行したら下記画面で対象のIDEを選択します。
lombok_installer
ところが、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などのライブラリを使用して冗長的にならない様にしたいですね。
導入編的に進めましたが、次回は別のアノテーションも紹介しようと思います。