[英]java 8 - store method in HashMap and get return value from method in map
我想將方法指針存儲在map中,以便根據字符串值執行它們。 根據我的發現,我可以使用Map<String, Runnable>
來完成它,但問題是我想從方法中獲取返回值。
說我有這樣的事情:
private Map<String, Runnable> timeUnitsMap = new HashMap<String, Runnable>() {{
timeUnitsMap.put("minutes", () -> config.getMinutesValues());
}}
config.getMinutesValues()
方法來自另一個類。
我該怎么做int value = timeUnitsMap.get("minutes").run();
或者在地圖中存儲其他東西(而不是Runnable
)以便從地圖中的函數中獲取值?
Runnable
不返回值。 您應該使用Supplier
或Callable
。
Supplier
和Callable
之間的主要區別在於Callable
允許您拋出已檢查的異常。 然后,您必須在使用Callable
任何地方處理該異常的可能性。 Supplier
可能更容易用於您的用例。
您需要將Map<String, Runnable>
更改為Map<String, Supplier<Integer>>
。 lambda函數本身不需要改變。
@assylias在評論中指出你也可以使用Map<String, IntSupplier>
。 使用IntSupplier
避免將int
IntSupplier
Integer
。
使用Callable而不是Runnable
。
您將需要使用Callable而不是Runnable,並且還需要覆蓋call()方法。
您可以從以下代碼段獲得線索:
private Map<String, Callable<Integer>> timeUnitsMap = new HashMap<String, Callable<Integer>>(){
{timeUnitsMap.put("minutes", () -> call());}};
你還需要覆蓋call()方法,
@Override
public Integer call() throws Exception {
return 1;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.