Java 8 函数<String, Void> 与消费者<String>
Java 8 Function<String, Void> vs Consumer<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>
当两者 return 都没有并且都接受一个字符串参数时。
谁能解释一下这件事,因为它正在杀人。
提前致谢!
A Function<String, Void>
应具有以下签名:
Void m(String s);
不要与 void m(String s);
!
混淆
因此您需要 return 一个 Void
值 - 唯一可用的是 null
:
takesAFunction((String str) -> {
System.out.println(str);
return null;
});
按预期编译。
我这辈子都找不到对以下内容的解释:
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>
当两者 return 都没有并且都接受一个字符串参数时。
谁能解释一下这件事,因为它正在杀人。
提前致谢!
A Function<String, Void>
应具有以下签名:
Void m(String s);
不要与 void m(String s);
!
因此您需要 return 一个 Void
值 - 唯一可用的是 null
:
takesAFunction((String str) -> {
System.out.println(str);
return null;
});
按预期编译。