個別のスタンドアロン静的イニシャラー関数の必要性をラムダに置き換えたいと考えています。たとえば、このようなものを置き換えたい...
class Foo {
private static final Set<String> keywords = keywords();
private static Set<String> keywords() {
HashSet<String> s = new HashSet<>();
s.add("AND");
s.add("NOT");
s.add("OR");
return Collections.unmodifiableSet(s);
}
}
クラスのロード時に定義されたラムダを呼び出すものを使用します。これを怠惰に呼び出すことが私の目標ではないことに注意してください。
とりあえず、 を受け取り、それを呼び出して値を返すInitializer
静的メソッドを持つ単純なクラスを作成しました。Supplier
Initializer
クラス
public class Initializer {
public static <T> T init(Supplier<T> initializer) {
return initializer.get();
}
}
次に、別のクラスで:
import static com.whatever.Initializer.init;
class Foo {
private static final Set<String> keywords = init(() -> {
HashSet<String> s = new HashSet<>();
s.add("AND");
s.add("NOT");
s.add("OR");
return Collections.unmodifiableSet(s);
});
}
独自のクラスを提供する必要がないように、標準 Java ライブラリに既に存在するものはありますInitializer
か、それともラムダをインプレースで単純に定義して実行する方法はありますか?