読者です 読者をやめる 読者になる 読者になる

覚えたら書く

IT関係のデベロッパとして日々覚えたことを書き残したいです。 twitter: @yyoshikaw

Lombok - @Getter / @Setter

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;
    }
}



関連エントリ