LoginSignup
3
2

More than 5 years have passed since last update.

lombokで生成されたgetterが、重複する場合の動き

Last updated at Posted at 2018-03-25

環境

  • Eclipse Pleiades 4.7.2(Build id: 20171218-0600)
  • Java8(1.8.0_152)
  • lombok 1.6.20(プロジェクトに取り込んだlombokとEclipseにインストールしたlombokは同じバージョン)

検証

lombokで生成されたgetterが、重複する場合の動きをまとめました。

フィールドaAが存在する場合

フィールドaAから、どちらもgetA()というメソッドが生成されます。
getA()を実行すると、どちらのフィールドの値が取得されるのでしょうか?
結果は以下の通りです。

OneCharacter.java
/** 最初が小文字のフィールド */
@Getter
public class OneCharacter  {

    private String a = "a";

    private String A = "A";

    public void print() {
        System.out.println(getA()); //⇒"a"
    }
}
OneCharacter.java
/** 最初が大文字のフィールド */
@Getter
public class OneCharacter  {

    private String A = "A";

    private String a = "a";

    public void print() {
        System.out.println(getA()); //⇒"A"
    }
}

フィールドAとメソッドgetA()が定義されている場合

クラス内で定義されたgetterと、lombokで生成されたgetterが同じ名前の場合、どちらが呼ばれるのでしょうか?

結果は以下の通りです。

OneCharacter.java
@Getter
public class OneCharacter  {

    public String getA() { return "getA()";}

    private String A = "A";

    public void print() {
        System.out.println(getA()); //⇒"getA()"
    }
}
OneCharacter.java
@Getter
public class OneCharacter  {

    private String A = "A";

    public String getA() { return "getA()";}

    public void print() {
        System.out.println(getA()); //⇒"getA()"
    }
}

宣言の順番に関係なく、クラス内で定義されたgetterが呼ばれました。

まとめ

  • lombokで生成されたgetterより、クラス内で定義されたgetterが優先される
  • lombokで生成されたgetterが重複する場合、最初に宣言されたフィールドに対応するgetterが優先される

追記

@inabajunmr からコメントをいただきました。

上記の現象は、lombok @Getter and @Setterに書いてありました。

You can annotate any field with @Getter and/or @Setter, to let lombok generate the default getter/setter automatically.
A default getter simply returns the field, and is named getFoo if the field is called foo (or isFoo if the field's type is boolean). A default setter is named setFoo if the field is called foo, returns void, and takes 1 parameter of the same type as the field. It simply sets the field to this value.

3
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2