我不能为我的生活找到以下的解释:
public static void takesAFunction(Functionfunc) { func.apply("Hi I'm running a function"); } public static void takesAConsumer(Consumer 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) in the type MyClass is not applicable for the arguments ((String str) -> {})
我不明白是怎么回事
Function
不同于
Consumer
当两者都不返回并且都接受单个String参数时.
有人可以解释一下它是否会被杀死.
提前致谢!
A Function
应该有以下签名:
Void m(String s);
不要混淆void m(String s);
!
所以你需要返回一个Void
值 - 唯一可用的是null
:
takesAFunction((String str) -> { System.out.println(str); return null; });
按预期编译.