首页 > 解决方案 > Java - 为什么立即执行的 lambda 函数会引发“在接口 [...] 中找到多个非覆盖抽象方法”?

问题描述

List<String> list = ( () -> new LinkedList<String>() )();

上面的代码引发了以下问题:Multiple non-overriding abstract methods found in interface java.util.List.

这个错误是什么意思?

标签: javalambdajava-8

解决方案


这不是我得到的错误消息,尽管它肯定是无效的 Java 语法。

您不能直接在 Java 语法中调用 lambda 表达式。编译器没有用于转换 lambda 表达式以直接调用它的语法生成。

它要么必须分配给功能接口类型,要么作为参数传递给方法,要么强制转换为功能接口类型。

如果将 lambda 表达式转换为函数式接口类型(此处为Supplier),则可以显式调用它。

List<String> list = ( (Supplier<List<String>>)  () -> new LinkedList<String>() ).get();

推荐阅读