menu
書いてる野郎
orebike@gmail.com
Java のインスタンスのフィールドは基本的に private でアクセサを通じて変更するという建前がある。 これは自由に変更することを禁止してインスタンス内部状態の整合性を保つためである。
なので、インスタンスを扱う場合もこのアクセサの存在を前提に組まれている。
しかし、単に出し入れしたいだけで整合性もクソも無いみたいなインスタンスもある。 この場合はフィールドに対して単にそれをそのまま返すだけの getter を書く場合が多い。
それをこの @Getter
をつけることで裏で勝手にアクセサを作ってとりつける。
public class Hoge{ @Getter private long id; @Getter private String name; }
↑のコードは↓のコードと等価になる。
public class Hoge{ @Getter private long id; public long getId(){ return this.id; } @Getter private String name; public String getName(){ return this.name; } }
配下全部指定したいならクラスにくっつければよい。
@Getter public class Hoge{ private long id; private String name; }
独自に先に書いておけば生成されない
@Getter public class Hoge{ private long id; private String name; public String getName(){ return this.name + "san"; } }
除外したいやつに NONE 指定すると getName が生成されない
@Getter public class Hoge{ private long id; @Getter(AccessLevel.NONE) private String name; }
ここだけ生成される名前がちょっと違う(全体設定で変えることできる)
public class Hoge{ private long id; @Getter private boolean piyo; }
↓このような getter が生成される。
public class Hoge{ private long id; @Getter private boolean piyo; public boolean isPiyo(){ return this.piyo; } }
もうフィールド自体に is ついちゃってるパターン。
public class Hoge{ private long id; @Getter private boolean isPiyo; }
この場合はそのままのメソッド名が生成される。
public class Hoge{ private long id; @Getter private boolean isPiyo; public boolean isPiyo(){ return this.isPiyo; } }
getter がさらに別のフレームワークかなんかでアノテーション経由で魔術的に利用される場合がある。 その場合にその別のフレームワークのアノテーションを生成される getter に付与したい場合がある。
このように記述する
public class Hoge{ private long id; @Getter(onMethod_={@Aaa, @Bbb}) private boolean piyo; }
そうするとこのように生成される。 若干地獄感あるので、素直に getter を手で書いてそれにアノテーションを付与したほうがいいと思う。
public class Hoge{ private long id; @Getter(onMethod_={@Aaa, @Bbb}) private boolean piyo; @Aaa @Bbb public boolean isPiyo(){ return this.piyo; } }