Lombok - コンストラクタの入力パラメータにフィールドの注釈を保持する 質問する

Lombok - コンストラクタの入力パラメータにフィールドの注釈を保持する 質問する

Lombok はコンストラクターを自動生成する際にフィールドの注釈を忘れてしまいます。コンストラクターの入力パラメータにフィールドの注釈を保持する方法はありますか?

コンストラクタを生成するクラス、

@RequiredArgsConstructor(onConstructor = @__(@Inject))
public class Test {

    @Named("MyField")
    private final String field;
    @Named("MyHandler")
    private final SomeHandler handler;
}

生成されたクラス:

public class Test {

    @Named("MyField")
    private final String field;
    @Named("MyField")
    private final SomeHandler handler;

    @Inject
    public Test(final String field, final SomeHandler handler) {
        this.field = field;
        this.handler = handler;
    }
}

希望クラス:

public class Test {

    @Named("MyField")
    private final String field;
    @Named("MyHandler")
    private final SomeHandler handler;

    @Inject
    public Test(@Named("MyField")final String field, 
                @Named("MyHandler")final SomeHandler handler) {
        this.field = field;
        this.handler = handler;
    }

}

ベストアンサー1

バージョンバージョン1.18.4Lombok は特定の注釈をコピーするためのサポートを追加しました。つまり、次の設定を行うとlombok.config

lombok.copyableAnnotations += com.google.inject.name.Named

次の Lombok アノテーションをクラスに適用します。

@RequiredArgsConstructor(onConstructor = @__(@Inject))
public class Hello {
    @NonNull @Named("my-name") String name;
}

アノテーション@Namedは生成されたコンストラクター引数にコピーする必要があります。

制限事項: これは以下の場合には機能しません注釈はフィールドに配置できませんまたはフィールドのアノテーションはコンストラクタの初期化をオーバーライドします

おすすめ記事