2
0

はじめに

今回は、業務で実際によく見かけるアノテーションをまとめるよ。この記事でまとめるアノテーションは、@Data@Value, @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructorの5つだよ。

@RequiredArgsConstructor

finalなフィールドを初期化するコンストラクタが生成されるよ。逆にfinalをつけないとインジェクションされないよ。
実際にコードを書くよ。@RequiredArgsConstructorを利用して作成したクラスは以下のようになるよ。

@RequiredArgsConstructor
public class Student {
    private final Integer id;
    private final String name;
    private String club;
}

これは、以下のようなコードと同じになるよ。

public class Student {
    private final Integer id;
    private final String name;
    private String club;

    // @RequiredArgsConstructorで作成されるコンストラクタ
    public Sample(Integer id, String name) {
        this.id = id;
        this.name = name;
    }
}

@NoArgsConstructor, @AllArgsConstructor

@NoArgsConstructorは、デフォルトコンストラクタを自動で生成してくれるよ。@AllArgsConstructorは、全フィールドを初期化するコンストラクタが生成されるよ。この2つのアノテーションはよくセットで使われることがあるよ。
またまた、アノテーションを使ったクラスを作るよ。

@NoArgsConstructor
@AllArgsConstructor
public class Student {
    private final Integer id;
    private final String name;
    private String club;
}

これは、以下のようなコードと同じになるよ。

public class Student {
    private final Integer id;
    private final String name;
    private String club;

    // @NoArgsConstructorで作成されるコンストラクタ
    public Sample() {
    }

    // @AllArgsConstructorで作成されるコンストラクタ
    public Sample(Integer id, String name, String club) {
        this.id = id;
        this.name = name;
        this.club = club;
    }
}

@Value

lombok#@Daraによると、@Valueは以下のアノテーションを付与したのと同じ状態になるようだよ。@Valueを付与すれば、イミュータブルなオブジェクトを作成できるよ。

  • @Getter
  • @ToString
  • @EqualsAndHashCode
  • @AllArgsConstructor
  • 全てのフィールドがprivateかつfinalになる
  • クラスはfinalになる

@Valueを使ってクラスを作ってみると、こんな感じ。

@Value
public class Student {
    Integer id;
    String name;
    String club;
}

@Valueを使わないと以下のようなイメージ。

final public class Student {
    private final Integer id;
    private final String name;
    private final String club;

    public Sample(Integer id, String name, String club) {
        this.id = id;
        this.name = name;
        this.club = club;
    }

    public Integer getId() {
		return id;
	}
	public String getName() {
		return name;
	}
	public String getClub() {
		return club;
	}
}

@Data

lombok#@Valueによると、@Dataは以下のアノテーションを付与したのと同じ状態になるようだよ。

  • @Getter
  • @Setter
  • @ToString
  • @EqualsAndHashCode
  • @RequiredArgsConstructor
    おもにgetter, setterを必要とするクラスに付与すると思っていたら良さそうだよ。
    クラスを作成すると、こんな感じ。
@Data
public class Student {
    private Integer id;
    private String name;
    private String club;
}

@Dataを使わないと以下のようなイメージ。

public class Student {
    private Integer id;
    private String name;
    private String club;

    public Sample(Integer id, String name, String club) {
        this.id = id;
        this.name = name;
        this.club = club;
    }

    public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getClub() {
		return club;
	}
	public void setClub(String club) {
		this.club = club;
	}
}

まとめ

lombokの便利な機能を使って、開発効率を上げていこう!
ただし、イミュータブルにしたいのに@Dataを付与したり、@Value@AllArgsConstructorを同時に付与して不要なものを付けたりしないように注意しよう。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0