不兼容的类型:lambda表达式中的错误返回类型void不是函数式接口

我正在浏览 Java 8 Feature 并使用 Jshell 来探索它。我尝试运行以下命令:

Consumer<String> consumer = (str)->System.out::println;

但它失败并出现以下错误:

Error:
|  incompatible types: bad return type in lambda expression
|      void is not a functional interface

我不明白到底是什么问题 Consumer 接受一个论点而什么都不返回。我在这里通过传递 1 arg str 和打印来做同样的事情。那么这个语法有什么问题。

谢谢,

回答

如果你想要一个Consumer<String>打印给它的字符串,它要么是一个 lambda 表达式调用System.out::println

Consumer<String> consumer = (str)->System.out.println(str);

或方法参考 System.out::println

Consumer<String> consumer = System.out::println;

但不是两者兼而有之。您似乎混淆了语法。str -> System.out::println将是一个 lambda 表达式,它接受一个对象,忽略它,并返回对 的方法引用System.out::println。例如,您可以执行以下操作:

Function<Object, Consumer<String>> func = str -> System.out::println;

但这种间接性非常罕见。


以上是不兼容的类型:lambda表达式中的错误返回类型void不是函数式接口的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>