はじめに
今回は、業務で実際によく見かけるアノテーションをまとめるよ。この記事でまとめるアノテーションは、@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
を同時に付与して不要なものを付けたりしないように注意しよう。