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
は生成されたコンストラクター引数にコピーする必要があります。
制限事項: これは以下の場合には機能しません注釈はフィールドに配置できませんまたはフィールドのアノテーションはコンストラクタの初期化をオーバーライドします