KEIS BLOGは株式会社ケイズ・ソフトウェアが運営しています。

KEIS BLOG

Java Tips -=-= Library =-=- Lombok Part 1


今回から数回に分けて画期的なライブラリ【Lombok】を紹介して行こうと思います。

Lombokとは

読み方は「ロンボック」または、「ロンボク」と読むようです。
クラスやメソッドにアノテーションをつけるだけで、Setter、Getter、toString、equalsなど繰り返し何度も書くコードを自動保管してくれます。
簡単に説明すると、ソースコード上SetterやGetterがなくても、コンパイルエラーにはならず、クラス外からSetterやGetterが利用できます。
更に、クラスファイルには変換済みのコードをベースにコンパイルされたコードが格納されているため、実行時にはLombokが必要ありません。

ダウンロードとインストール

Lombokは他のライブラリと違い、IDEにインストールが必要です。
# 理由は上記で説明したとおり、コンパイラーへの割り込みが必要になるため

1. 始めに下記のサイトよりlombok.jarをダウンロードしてください。

URL
https://projectlombok.org/index.html

2. ダウンロードしたlombok.jarを実行してインストールを行ってください。
使用しているIDEにより、インストール方法が異なります。詳しくはインストール時の説明を参照してください。

3. pom.xmlにdependencyを追加してください。

<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<version>1.16.14</version>
	<scope>provided</scope><!-- 実行時に不必要なため、provided -->
</dependency>

使用方法

Lombokで使える機能は以下の通りです。
この中から使い勝手の良さそうな機能をチョイスして、ご紹介していこうと思います。
各機能の解説は面白かったので、翻訳内容をそのまま載せています。

– val
手間のかからないfinal変数

– @NonNull
NullPointerExceptionを気にすることをやめ、愛する方法を学んだ

– @Cleanup
自動リソース管理:close()メソッドを面倒なく安全に呼び出します

– @Getter / @Setter
`public int getFoo() {return foo;}`を二度と書くことはありません。

– @ToString
あなたのフィールドを見るためにデバッガを起動する必要はありません:ロンボクにあなたのためのtoStringを生成させてください!

– @EqualsAndHashCode
平等化が容易:オブジェクトのフィールドからhashCodeを生成し、実装と同等になります。

– @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor
順序付けられたコンストラクター:引数を取らないコンストラクター、最終フィールド/非NULLフィールドごとの1つの引数、またはすべてのフィールドの1つの引数を生成します。
– @Data
すべて一緒に:@ToString、@EqualsAndHashCode、すべてのフィールドで@Getter、およびすべての非最後のフィールドで@Setter、@RequiredArgsConstructorのショートカット!
– @Value
不変クラスは非常に簡単にできました。

– @Builder
ボブのおじさん:オブジェクト作成用の面倒なファンシーパンツ!

– @SneakyThrows
前に誰も投げ入れていない場所で、チェック例外を大胆に投げる!

– @Synchronized
同期が完了しました。ロックを公開しないでください。

– @Getter(lazy=true)
怠惰は美徳です!

– @Log
キャプテンズ・ログ、スターディート 24435.7:「その行は何だったの?」

とりあえず定番の`@Getter`,`@Setter`から

– @Getter and @Setter
フィールドにこのアノテーションを付与することで、SetterとGetterが自動的に作成されます。
実際のコードと同等の機能を持つコードを比較すると、半分程度の行数になります。

実際のコード

import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;

public class GetterSetterExample {

  @Getter @Setter private int age = 10;
  
  @Setter(AccessLevel.PROTECTED) private String name;
  
  @Override public String toString() {
    return String.format("%s (age: %d)", name, age);
  }
}

同等の機能を持つコード

public class GetterSetterExample {

  private int age = 10;
  private String name;
  
  @Override public String toString() {
    return String.format("%s (age: %d)", name, age);
  }
  
  public int getAge() {
    return age;
  }
  
  public void setAge(int age) {
    this.age = age;
  }
  
  protected void setName(String name) {
    this.name = name;
  }
}

– @ToString
クラスにこのアノテーションを付与することでtoStringメソッドが自動的に作成されます。

実際のコード

import lombok.ToString;

@ToString(exclude="id")
public class ToStringExample {
  private static final int STATIC_VAR = 10;
  private String name;
  private Shape shape = new Square(5, 10);
  private String[] tags;
  private int id;
  
  public String getName() {
    return this.getName();
  }
  
  @ToString(callSuper=true, includeFieldNames=true)
  public static class Square extends Shape {
    private final int width, height;
    
    public Square(int width, int height) {
      this.width = width;
      this.height = height;
    }
  }
}

同等の機能を持つコード

import java.util.Arrays;

public class ToStringExample {
  private static final int STATIC_VAR = 10;
  private String name;
  private Shape shape = new Square(5, 10);
  private String[] tags;
  private int id;
  
  public String getName() {
    return this.getName();
  }
  
  public static class Square extends Shape {
    private final int width, height;
    
    public Square(int width, int height) {
      this.width = width;
      this.height = height;
    }
    
    @Override public String toString() {
      return "Square(super=" + super.toString() + ", width=" + this.width + ", height=" + this.height + ")";
    }
  }
  
  @Override public String toString() {
    return "ToStringExample(" + this.getName() + ", " + this.shape + ", " + Arrays.deepToString(this.tags) + ")";
  }
}

定番のアノテーション@Setter, @Getter, @ToStringでした。
次回も引き続き【Lombok】ご紹介いたします。

【関連記事】
Google App Engine 第一回
Google App Engine 第二回
Javaのライブラリを手軽にテストしたい!! Groovy入門 第1回
Google App Engine 第三回
Google App Engine 第四回
Google App Engine 第五回
Google App Engine 第六回
Google App Engine 第七回
Google App Engine 第八回
Google App Engine 第九回
Google App Engine 第十回
Google App Engine 第十一回
Google App Engine 第十二回
AngularJS入門01
AngularJS入門02
AngularJS入門03
AngularJS入門04
AngularJS入門05
AngularJS入門06
AngularJS入門07
AngularJS入門08
AngularJS入門09
攻略 Elevator Saga =基本編=
攻略 Elevator Saga =応用編=
Java Tips -=-= Library =-=- JodaTime [前半]
Java Tips -=-= Library =-=- JodaTime [後半]