lambda Java 8函数<String,Void>vs消费者<String>
我一生都找不到以下的解释:
public static void takesAFunction(Function<String, Void> func) {
func.apply("Hi I'm running a function");
}
public static void takesAConsumer(Consumer<String> func) {
func.accept("Hi I'm running a consumer");
}
public static void main(String[] args) throws Exception {
takesAFunction((String str) -> { System.out.println(str); });
takesAConsumer((String str) -> { System.out.println(str); });
}
我正在使用JDK 1.8.0_66和该行
takesAFunction((String str) -> { System.out.println(str); });
被标记为错误,表示
The method takesAFunction(Function<String,Void>) in the type MyClass
is not applicable for the arguments ((String str) -> {})
我不明白这是怎么回事
Function<String, Void>
不同于
Consumer<String>
当两者都不返回任何内容并且都接受单个字符串参数时
有人能解释一下这件事吗,因为它会杀人
提前谢谢
# 1 楼答案
A
Function<String, Void>
应具有以下签名:不要与
void m(String s);
混淆因此,您需要返回一个
Void
值,唯一可用的值是null
:按预期编译