SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

Java特有の冗長なコードを簡潔に記述する「Lombok」

@Data

 Lombokでは、対象のクラスに@Dataアノテーションを指定することで、getter/setterを記述したのと同等の効果が得られます。

 それ以外にもtoStringメソッド、equalsメソッド、hashCodeメソッド、コンストラクタが定義され、JavaBeanを作成するには大変便利なアノテーションとなっています。

 非常に見やすいコードになったのではないでしょうか。

会員クラスのコード Lombok使用版
@Data
public class Member {
    private String id;
    private String name;
}
@Dataアノテーション属性の説明
属性 説明
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を利用したコード
@Getter
public class Member {
    private String id;
    private String name;
}
@Getterアノテーション属性の説明
属性 説明
value getterメソッドのアクセス識別子を設定する。省略時はpublic。
lazy この属性をtrueにした場合、対象のgetterメソッドが最初に呼び出されたときにのみ初期化処理を行い、その結果をキャッシュして2回目以降はキャッシュされた値を返却するようにする。省略時はfalse。
※メモ

 アノテーション属性はvalueのみ定義する場合「value=」を省略し、「@Getter(AccessLevel.PROTECTED」と記述することもできます。

@Setter

 @Getterアノテーションと同様に、setterメソッド用のアノテーションも用意されています。

@Setterを利用したコード
@Setter
public class Member {
    private String id;
    private String name;
}
@Setterアノテーション属性の説明
属性 説明
value setterメソッドのアクセス識別子を設定する。省略時はpublic。

次のページ
コンストラクタ

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

五座 淳一(株式会社DTS)(ゴザ ジュンイチ)

株式会社DTS 金融企画部所属。主に大規模・金融機関向けシステム開発のアーキテクト担当しています。ウォーターフォール型の開発に、CIなどアジャイル開発のプラクティスを取り入れ、開発プロセスの改善を試みています。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7274 2013/08/20 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー