Java / Lombok / Getter

Java / Lombok / Getter

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

独自に先に書いておけば生成されない

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

boolean 型の Getter

ここだけ生成される名前がちょっと違う(全体設定で変えることできる)

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 がさらに別のフレームワークかなんかでアノテーション経由で魔術的に利用される場合がある。 その場合にその別のフレームワークのアノテーションを生成される 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;
    }
}
java/lombok/getter.txt · 最終更新: 2021-02-03 18:50 by ore