現在、すべての定型コードにLombokを使用するために、すべての標準POJOを置き換えています。リストが初期化されていない場合は空のリストを返したいため、リストのゲッターを保持しています。つまり、ゲッターがnullを返すのは望ましくありません。私が知らないロンボクの魔法があれば、これを避けることができますか?
生成されたコードの例
private List<Object> list;
public Object getList(){ return list; }
代わりに私が欲しいもの:
private List<Object> list;
public Object getList(){
if (list == null) {
return new ArrayList();
}
return list;
}
これを実現するには、フィールドを宣言して初期化します。囲んでいるオブジェクトが初期化されると、初期化が行われます。
private List<Object> list = new ArrayList();
ロンボク@Getter
アノテーションは、遅延初期化を許可する属性lazy
を提供します。
@Getter(lazy=true) private final double[] cached = expensiveInitMethod();
これと同じ質問がありました。上記の答えはいくつかの点で有用ですが、正確な解決策は @Builder
および@Singular
以下のコードのようなLombok APIの注釈。
それは私にとって素晴らしい仕事でした。
@Builder
class MyClass{
@Singular
private List<Type> myList;
}
これにより、myListがnull以外のListオブジェクトで初期化されます。ただし、この質問は古いものです。しかし、今後この質問を参照する私のような人を助けるために、この回答をまだ投稿しています。
つまり、ゲッターがnullを返すのは望ましくありません。私が知らないロンボクの魔法があれば、これを避けることができますか?
魔法を起こす必要はありません。 list
を初期化するだけです。
フィールドでAccessLevel.NONEを使用して、ゲッターを好きなものでオーバーライドできます。
フィールドを初期化するだけでは、nullを使用してコンストラクターを呼び出したり、nullを使用してセッターを呼び出したりするクライアントから保護されないことに注意してください(必要に応じて、まだ大丈夫かもしれません)。
例えば。
@Getter(AccessLevel.NONE)
private Map<String, String> params;
public Map<String, String> getParams() {
return (params == null) ? new HashMap<>() : params;
}