@Data
Lombokでは、対象のクラスに@Dataアノテーションを指定することで、getter/setterを記述したのと同等の効果が得られます。
それ以外にもtoStringメソッド、equalsメソッド、hashCodeメソッド、コンストラクタが定義され、JavaBeanを作成するには大変便利なアノテーションとなっています。
非常に見やすいコードになったのではないでしょうか。
@Data
public class Member {
private String id;
private String name;
}
| 属性 | 説明 |
|---|---|
| staticConstructor |
staticコンストラクタを用意する場合に設定する属性。 この属性を使用した場合にはコンストラクタはprivateとなり、 他のクラスからstaticコンストラクタでの生成のみ許されるようになる。 |
Lombokが最も優れている点は、IDEがLombokアノテーションを適切に認識し、あたかも自動生成されたかのように振る舞えることです。
アウトラインビューをご覧ください。Eclipseのアウトラインビューは編集中のクラスにどのようなメソッドが実装されているのかを表示するビューですが、@Dataアノテーションによって実装された各メソッドが認識され、アウトラインビューに表示されています。
今度は、会員クラスを参照する側のコードを見てみましょう。
Member member = new Member();
member.setId("00201");
member.setName("山田太郎");
IDEがLombokアノテーションを適切に認識し、getter/setterを実装した時と同じように呼び出すことができます。もちろん、自動補完も有効となっています。
@Value
@Dataアノテーションと似た機能で、@Valueアノテーションという変更不可のValueオブジェクトを扱うためのアノテーションも用意されています。
@Dataと異なるのは、setterメソッドが用意されない点です。コンストラクターですべての値を設定し、getterメソッドでその値を利用するだけのオブジェクトです。
属性についても、@Dataと同じstaticConstructorが用意されています。
@Getter
@Getterアノテーションは、getterメソッドを定義するためのアノテーションで、クラスもしくはフィールドに対して定義することができます。
- クラスに対して定義した場合:クラスが保持するすべてのフィールドに対してgetterメソッドが定義されます。
- フィールドに対して定義した場合:そのフィールドに対するgetterメソッドが定義されます。
また、明示的にgetterメソッドを記述すれば、それが有効になります。クラスに対して@Getterアノテーションを付与し、特別なgetterメソッドが必要な箇所のみ明示的に記述すると便利です。
@Getter
public class Member {
private String id;
private String name;
}
| 属性 | 説明 |
|---|---|
| value | getterメソッドのアクセス識別子を設定する。省略時はpublic。 |
| lazy | この属性をtrueにした場合、対象のgetterメソッドが最初に呼び出されたときにのみ初期化処理を行い、その結果をキャッシュして2回目以降はキャッシュされた値を返却するようにする。省略時はfalse。 |
アノテーション属性はvalueのみ定義する場合「value=」を省略し、「@Getter(AccessLevel.PROTECTED」と記述することもできます。
@Setter
@Getterアノテーションと同様に、setterメソッド用のアノテーションも用意されています。
@Setter
public class Member {
private String id;
private String name;
}
| 属性 | 説明 |
|---|---|
| value | setterメソッドのアクセス識別子を設定する。省略時はpublic。 |
