Webエンジニアのメモ帳

技術的な話を中心に書いています。

【Java】Lombokの@Dataと@Valueについて

Lombokを使うと、ゲッターやセッター、コンストラクタなどを一々書かなくても、クラスにアノテーションを付与するだけでこれらを使うことができるようになります。

これらをまとめて付与してくれる2種類のアノテーションについて説明します。

@Dataについて

@Dataアノテーションを付与されたクラスは、以下の5つのアノテーションが付与されたのと同じになります。

  • @Getter
  • @Setter
  • @RequiredArgsConstructor
  • @ToString
  • @EqualsAndHashCode

@Valueについて

@Valueアノテーションを付与されたクラスは、以下の4つのアノテーションが付与されたのと同じになります。

  • @Getter
  • @AllArgsConstructor
  • @ToString
  • @EqualsAndHashCode

@Dataと@Valueの違いについて

@Setterがあるかないか

@Dataには@Setterがありません。

そのため基本的な使い方として、インスタンスの生成以降フィールドの値を変えない時には@Valueを、フィールドの値を変更する時には@Dataを使うようです。

コンストラクタの種類が違う

また@Dataと@Valueではコンストラクタの種類が違います。

@RequiredArgsConstructorは、final修飾子がついたフィールドにのみ値をセットするコンストラクタを生成しますが、@AllArgsConstructorは、全てのフィールドに値をセットするコンストラクタを生成します。