Lombokの@Getter(lombok.Getter)と @Setter(lombok.Setter)アノテーションの利用サンプルです。
@Getter
/@Setter
はその名の通り、getter/setterを自動生成するためのアノテーションです。
@Getter/@Setterをクラスに付与
@Getter
, @Setter
をクラスに付与すると全メンバに対するgetter/setterが自動生成されます
■@Getter/@Setterを付与したクラス
import lombok.Getter; import lombok.Setter; @Getter @Setter public class Person1 { private long id; private String name; private boolean isAdult; }
■実際に生成されているソースコード
実際に生成されているソースコードをdelombokを使って確認してみました。
全メンバに対するgetter, setterが生成されていることが分かります。
public class Person1 { private long id; private String name; private boolean isAdult; public long getId() { return this.id; } public String getName() { return this.name; } public boolean isAdult() { return this.isAdult; } public void setId(final long id) { this.id = id; } public void setName(final String name) { this.name = name; } public void setAdult(final boolean isAdult) { this.isAdult = isAdult; } }
@Getter/@Setterをメンバに付与
@Getter
, @Setter
はクラスだけではなく、各々のメンバに付与することができます。
■@Getter/@Setterを付与したクラス
import lombok.Getter; import lombok.Setter; public class Person2 { @Setter private long id; @Getter @Setter private String name; @Getter @Setter private boolean isAdult; }
■実際に生成されているソースコード
実際に生成されているソースコードをdelombokを使って確認してみました。
getter, setterが生成されていることが分かります。ただし、メンバのidに対するgetterが生成されていないこともわかります
public class Person2 { private long id; private String name; private boolean isAdult; public void setId(final long id) { this.id = id; } public String getName() { return this.name; } public void setName(final String name) { this.name = name; } public boolean isAdult() { return this.isAdult; } public void setAdult(final boolean isAdult) { this.isAdult = isAdult; } }
getter/setterのアクセスレベルを制御する
@Getter
, @Setter
のパラメータにAccessLevelを指定することで、生成されるgetter, setterのアクセスレベルを制御することができます。
■@Getter/@Setterを付与したクラス
import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; @Getter(AccessLevel.PACKAGE) @Setter(AccessLevel.PROTECTED) public class Person3 { private long id; private String name; private boolean isAdult; }
■実際に生成されているソースコード
実際に生成されているソースコードをdelombokを使って確認してみました。
getter, setterのアクセスレベルがpackageプライベートとprotectedになっていることが分かります。
public class Person3 { private long id; private String name; private boolean isAdult; long getId() { return this.id; } String getName() { return this.name; } boolean isAdult() { return this.isAdult; } protected void setId(final long id) { this.id = id; } protected void setName(final String name) { this.name = name; } protected void setAdult(final boolean isAdult) { this.isAdult = isAdult; } }