当前位置:  开发笔记 > 编程语言 > 正文

Java 8函数<String,Void> vs Consumer <String>

如何解决《Java8函数<String,Void>vsConsumer<String>》经验,为你挑选了1个好方法。

我不能为我的生活找到以下的解释:

public static void takesAFunction(Function func) {
    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参数时.

有人可以解释一下它是否会被杀死.

提前致谢!



1> assylias..:

A Function应该有以下签名:

Void m(String s);

不要混淆void m(String s);!

所以你需要返回一个Void值 - 唯一可用的是null:

takesAFunction((String str) -> {
  System.out.println(str);
  return null;
});

按预期编译.

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有