簡體   English   中英

java 8 - 在HashMap中存儲方法並從map中的方法獲取返回值

[英]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不返回值。 您應該使用SupplierCallable

SupplierCallable之間的主要區別在於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM