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; } }
これで、フィールド宣言だけ書けばいい感じに!だいぶ楽になるな〜