2017-09-05 9 views
1

は、私は、エンティティ抑制するためにどのようにロンボク島の警告

@Builder 
class MyEntity { 
    private Set<OtherEntitiy> children = new HashSet<>() 
} 

持っていると私はロンボク警告が表示されます。

警告:@Builderは初期化式を完全に無視します。初期化式をデフォルトとして使用する場合は、@ Builder.Defaultを追加します。ビルド中に設定可能ではない場合は、フィールドをファイナルにします。 Set = new HashSet <>();

質問:私はロンボクの警告をどのように抑制できますか?

また、私はNullPointerExceptionを避けたいので、子供を初期化する必要があります。また、最終的なものではないので、私はこれをファイナルとしてマークすることはできません。なぜなら、このエンティティはビルダーだけでなく、他のコンストラクタのデフォルト値を保存したいのですから、@Builder.Defaultというマークを付けることはできません。

+2

私はロンボクが常にその値を上書きすると言っていると思います。 https://github.com/rzwitserloot/lombok/issues/916私は本当にロンボクをよく知っていませんが、回避策はクラスの代わりに '@ Builder'を使ってコンストラクタをターゲットにすることです。 – Radiodef

+0

私は警告がかなり自明であると思うし、あなたはそれを抑制しようとする代わりにメッセージの示唆に従うことによって警告を修正することを考えるべきです。 – dpr

+0

@dprあなたは正しいです。まず、問題を解決する方法を考える必要があります。しかしこの場合、提案された決定は容認できません。私は上記の質問でそれを説明していた。 –

答えて

1

使用@Builder.DefaultBuilder

@Builder 
class MyEntity { 
    @Builder.Default 
    private Set<String> children = new HashSet<>(); 
} 

あなたはLombok
は、オブジェクトの作成時に値をピックアップします定義されたデフォルト値を持つフィールド上でそれを使用するあなたのためのデフォルトの動作を追加する

@Builder.Default機能が追加されましたlombok v1.16.16. Lombokの下位バージョンを使用している場合、それを使用できるようになります。

関連する問題