不兼容的类型:错误的 return lambda 表达式类型 | void 不是功能接口
incompatible types: bad return type in lambda expression | void is not a functional interface
我正在研究 Java 8 个功能并使用 Jshell 来探索它。我尝试 运行 以下命令:
Consumer<String> consumer = (str)->System.out::println;
但失败并出现以下错误:
Error:
| incompatible types: bad return type in lambda expression
| void is not a functional interface
我不明白消费者接受一个参数而 return 什么都没有的问题到底是什么。我在这里通过传递 1 arg str 和打印来做同样的事情。那么这个语法有什么问题呢。
谢谢,
您将 lambda 表达式与方法引用混合在一起。
如果你想使用lambda表达式,
Consumer<String> consumer = str -> System.out.println(str);
如果需要方法参考,
Consumer<String> consumer = System.out::println;
如果你想要一个 Consumer<String>
打印给它的字符串,它可以是调用 System.out::println
:
的 lambda 表达式
Consumer<String> consumer = (str)->System.out.println(str);
或对 System.out::println
的方法引用
Consumer<String> consumer = System.out::println;
但不是两者。您似乎混淆了语法。 str -> System.out::println
将是一个 lambda 表达式,它接收一个对象并忽略它,而 returns 是对 System.out::println
的方法引用。例如,您可以这样做:
Function<Object, Consumer<String>> func = str -> System.out::println;
但这种间接性非常少见。
我正在研究 Java 8 个功能并使用 Jshell 来探索它。我尝试 运行 以下命令:
Consumer<String> consumer = (str)->System.out::println;
但失败并出现以下错误:
Error:
| incompatible types: bad return type in lambda expression
| void is not a functional interface
我不明白消费者接受一个参数而 return 什么都没有的问题到底是什么。我在这里通过传递 1 arg str 和打印来做同样的事情。那么这个语法有什么问题呢。
谢谢,
您将 lambda 表达式与方法引用混合在一起。
如果你想使用lambda表达式,
Consumer<String> consumer = str -> System.out.println(str);
如果需要方法参考,
Consumer<String> consumer = System.out::println;
如果你想要一个 Consumer<String>
打印给它的字符串,它可以是调用 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 表达式,它接收一个对象并忽略它,而 returns 是对 System.out::println
的方法引用。例如,您可以这样做:
Function<Object, Consumer<String>> func = str -> System.out::println;
但这种间接性非常少见。