1. ホーム
  2. java

[解決済み] Lombokの各種コンストラクターにアノテーション?

2022-02-18 21:38:49

質問

クラスがあります

public class Answer<T> {
    private T data;

    public Answer(T data) {
        this.data = data;
    }

    public Answer() {
    }

    public T getData() {
        return data;
    }

    public Answer<T> setData(T data) {
        this.data = data;
        return this;
    }
}

で簡略化したいのですが Lombok .

アノテーションを追加すると @AllArgsConstructor デフォルトのコンストラクタが表示されません。

@Data
@AllArgsConstructor
public class Answer<T> {
    private T data;

    public Answer<T> setData(T data) {
        this.data = data;
        return this;
    }
}

の中に両方のコンストラクタを持つことは可能ですか? Lombok ?

解決方法は?

あなたのクラスは同等です。

@Accessors(chain = true)
@Data    
@NoArgsConstructor
@AllArgsConstructor
public class Answer<T> {

    private T data;
}

厳密には、これは toString , equalshashCode メソッドを すべて 変数を使用します。 これは無限ループを引き起こす可能性があります(そしてしばしばそうなります)。また @Data .

@Accessors(chain = true)setter の実装は this 詳細はこちら こちら .

コンストラクタのアノテーションを複数追加することができます。

他の多くの lombok アノテーションとは異なり、明示的なコンストラクタが存在しても、これらのアノテーションが独自のコンストラクタを生成することを止めることはできません。

なお @Accessors は実験的なものなので、将来のある時点で変更されたり、名前が変わったりする可能性があります。

私は @Builder から @AllArgsConstructor のみを許可しているため 必須 引数をすべて指定するコンストラクタは、all or nothing です。また、より読みやすいコードが生成されます。

new Thing(true, 1, 4, false, 4, 4.0)

対談

new Thing.Builder().
    setANamnedProperty(true).
    setAnotherNamnedProperty(1).
    ....
    build();