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

くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

lombokでSetter/Getterの自動生成で楽をする

java libraries

DTOやJavaBeanを作る際に、Setter/Getterを書くのがめんどくさくなってきた。 なんと、Lombokというライブラリを使うと、アノテーションを書くだけで自動生成してくれるらしい!

AndroidStudio(Gradle)でLombokを使うときの備忘録。

build.gradleにdependenciesを追加

3行目な感じで、dependenciesにlombokを追加すればOK

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'org.projectlombok:lombok:1.14.4'
}

Lombokを使う

一番簡単な例はこんな感じ。クラス宣言に「@Data」と記載すると・・・

import lombok.Data;

@Data
public class SampleBean {
    private int intA;
    private Integer intB;
    private String strA;
}

これだけ自動生成してくれる!!

public class SampleBean {
    private int intA;
    private Integer intB;
    private String strA;

    public SampleBean() {
    }

    public int getIntA() {
        return this.intA;
    }

    public Integer getIntB() {
        return this.intB;
    }

    public String getStrA() {
        return this.strA;
    }

    public void setIntA(int intA) {
        this.intA = intA;
    }

    public void setIntB(Integer intB) {
        this.intB = intB;
    }

    public void setStrA(String strA) {
        this.strA = strA;
    }

    public boolean equals(Object o) {
        if (o == this) return true;
        if (!(o instanceof SampleBean)) return false;
        final SampleBean other = (SampleBean) o;
        if (!other.canEqual((Object) this)) return false;
        if (this.intA != other.intA) return false;
        final Object this$intB = this.intB;
        final Object other$intB = other.intB;
        if (this$intB == null ? other$intB != null : !this$intB.equals(other$intB)) return false;
        final Object this$strA = this.strA;
        final Object other$strA = other.strA;
        if (this$strA == null ? other$strA != null : !this$strA.equals(other$strA)) return false;
        return true;
    }

    public int hashCode() {
        final int PRIME = 59;
        int result = 1;
        result = result * PRIME + this.intA;
        final Object $intB = this.intB;
        result = result * PRIME + ($intB == null ? 0 : $intB.hashCode());
        final Object $strA = this.strA;
        result = result * PRIME + ($strA == null ? 0 : $strA.hashCode());
        return result;
    }

    protected boolean canEqual(Object other) {
        return other instanceof SampleBean;
    }

    public String toString() {
        return "my.sample.bean.SampleBean(intA=" + this.intA + ", intB=" + this.intB + ", strA=" + this.strA + ")";
    }
}

これだけあると自動生成後のソースが大きくなるので、Setter/Getterだけを生成している。

  • @Setter ・・・ Setterを生成
  • @Getter ・・・ Getterを生成
@Getter
@Setter
public class SampleBean {
    private int intA;
    private Integer intB;
    private String strA;
}

すると・・・

public class SampleBean {
    private int intA;
    private Integer intB;
    private String strA;

    public int getIntA() {
        return this.intA;
    }

    public Integer getIntB() {
        return this.intB;
    }

    public String getStrA() {
        return this.strA;
    }

    public void setIntA(int intA) {
        this.intA = intA;
    }

    public void setIntB(Integer intB) {
        this.intB = intB;
    }

    public void setStrA(String strA) {
        this.strA = strA;
    }
}

また、フィールド宣言にアノテーションをつければ、個別に生成できます。

public class SampleBean {
    @Getter
    private int intA;
    @Setter
    private Integer intB;
    @Getter
    @Setter
    private String strA;
}

こんなかんじに!

public class SampleBean {
    private int intA;
    private Integer intB;
    private String strA;

    public int getIntA() {
        return this.intA;
    }

    public String getStrA() {
        return this.strA;
    }

    public void setIntB(Integer intB) {
        this.intB = intB;
    }

    public void setStrA(String strA) {
        this.strA = strA;
    }
}

これで、フィールド宣言だけ書けばいい感じに!だいぶ楽になるな〜

参考にしたサイト