我正在尝试声明一个HashMap
,它会接受一个字符串并返回Callable
。
我有:
Map<String, Callable<String>> commands = new HashMap<>();
commands.put("get", (String item) -> get(item));
其中get是一个返回void的函数。
但我得到了
"Bad return type in Lambda expression: Void cannot be converted into a string."
为什么期望函数返回一个字符串?我想将lambda传递给String
并返回void
。
答案 0 :(得分:5)
Callable<String>
有一个返回String
(V call() throws Exception
)的方法,所以你不能使用带有void返回类型的lambda。您可以改为使用Consumer<String>
。
Map<String, Consumer<String>> commands = new HashMap<>();
commands.put("get", (String item) -> get(item));
答案 1 :(得分:0)
将Callable<String>
的lambda表示作为值放入地图的正确语法是:
Map<String, Callable<String>> commands = new HashMap<>();
commands.put("get", () -> "some value");
这是因为功能接口Callable<T>
有一个返回T
值的方法。