【Java】変数名でgetterをしたい。。。「isHas○○」ではなく「has○○」に~

以下のようなオブジェクトクラスがあるとします

lombokの仕様上、「firstName」の値を取得する場合「getFirstName()」、「hasData」の値を取得する場合「isHasData()」となります

@Value
public class Person {
    private String firstName;
    private String lastName;
    private int age;
    private boolean hasData;
}

ここである論争が始まります

「isHasDate()」ってメソッド名的におかしくない??

です。。。

「is」と「has」が合体していることに疑問を抱くのです

isは「です」、has「がある」なので、「データがあるです」というメソッドとなる(笑)

データの存在有無なのであれば、「has」だけでいいのですがlombokが邪魔をする。。。

そんな時に使うと良いのが「@Accessors(fluent=true)」です

同じくLombokのJライブラリで提供されているアノテーションです!!

このアノテーションは、getterメソッドやsetterメソッドの生成方法を制御するために使用されます

具体的には、fluent=trueを指定することで、Lombokが自動的にフルエント(Fluent)インターフェースパターンを生成します
このパターンではsetterメソッドが値を設定したオブジェクト自体を返すようになります

以下に、@Accessors(fluent=true)の使い方を紹介します

@Value
public class Person {
    private String firstName;
    private String lastName;
    private int age;

    @Accessors(fluent=true)
    private boolean hasData;
}

上記のようにフィールドに「@Accessors(fluent=true)」を設定してみました

そうすると

Person person = new Person("佐藤", "太郎", 20, true);
boolean result = person.hasData();

resultは「true」となります

「@Accessors(fluent=true)」を付与しない状態だと「isHasData()」でしたが、付与することで「hasData()」でhasData使用することができるのです

是非参考ください

ではっ

是非フォローしてください

最新の情報をお伝えします