我正在尋求用lambda替換對單獨的獨立靜態短語函數的需求。例如我想替換這樣的東西...JDK庫是否提供lambda'invoker'實用類?
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);
}
}
有些東西調用了在類加載時定義的lambda。請注意,這不是我的目標。
目前,我用靜態方法創建了一個簡單的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
類,還是有一些方法來簡單地定義,然後執行一個lambda就地?
你不需要一個方法來初始化關鍵字。你的lambda版本究竟是什麼? – zeroflagL
爲什麼你在這裏需要lambda?看起來你只需要一個靜態初始化塊('static {}')並在那裏調用你的inits? – Zhedar
相關:[如何使用lambda初始化映射?](http://stackoverflow.com/questions/32868665/how-to-initialize-a-map-using-a-lambda) –