首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 8 Function<String,Void>和Consumer<String>

Java 8 Function<String,Void>和Consumer<String>
EN

Stack Overflow用户
提问于 2015-12-16 15:53:48
回答 1查看 3.4K关注 0票数 6

我无法为我的一生找到以下的解释:

代码语言:javascript
复制
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和行

代码语言:javascript
复制
takesAFunction((String str) -> { System.out.println(str); });

被标记为错误,指出

代码语言:javascript
复制
The method takesAFunction(Function<String,Void>) in the type MyClass 
is not applicable for the arguments ((String str) -> {})

我不明白怎么

代码语言:javascript
复制
Function<String, Void> 

不同于

代码语言:javascript
复制
Consumer<String>

当两者都返回空值并且都接受单个字符串参数时。

有人能帮我解释一下这件事吗?因为它要死了。

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-16 15:55:38

Function<String, Void>应该具有以下签名:

代码语言:javascript
复制
Void m(String s);

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

因此,您需要返回一个Void值-唯一可用的值是null

代码语言:javascript
复制
takesAFunction((String str) -> {
  System.out.println(str);
  return null;
});

按预期进行编译。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34316443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档