当前位置: 首页 > 知识库问答 >
问题:

Java-为什么即时执行的lambda函数会引发“在接口[…]中找到的多个非重写抽象方法”?[副本]

唐煜
2023-03-14
List<String> list = ( () -> new LinkedList<String>() )();

上面的代码引发了以下问题:接口java.util.List中找到了多个非重写抽象方法。

这个错误是什么意思?

共有1个答案

凌波峻
2023-03-14

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

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

必须将其分配给函数接口类型、作为参数传递给方法或强制转换为函数接口类型。

如果您将lambda表达式强制转换为函数式接口类型(此处为供应商),那么您可以显式调用它。

List<String> list = ( (Supplier<List<String>>)  () -> new LinkedList<String>() ).get();
 类似资料:
  • 现在使用Lambda表达式,为什么Java不能允许以下两个,因为它清楚地区分了这两个:

  • 但是为什么一个函数接口应该只有一个抽象方法呢?如果接口有多个抽象方法,为什么这不是函数接口?

  • 当我看到Iterable接口源时,它看起来像方法和方法不是抽象的。接口如何具有非抽象方法?还是我在这件事上漏掉了什么?请参阅下面的接口源代码。

  • 我是Java新手,来自C语言背景,我试图理解接口和实现接口的抽象类的概念。当抽象类实现接口时,会发生什么?这是否像继承一样工作,即所有接口方法都属于abtract类,即使它们没有在其中实现?还是只有实现的方法属于抽象类?那么,除了一个用于实现接口,另一个用于继承之外,实现和扩展之间有什么区别吗?

  • 当我们不知道任何给定对象的finalize()方法何时可以运行时,我们需要在java中重写finalize()方法的哪里?我们可以在finalize()中关闭什么类型的资源?GC调用finalize()方法的最佳机会是什么?

  • 最近,我开始了一个新的项目,其中具有单个抽象方法的所有接口都用来代替。我经常看到有人在界面中添加另一个抽象方法后删除注释。我什么时候问过为什么?他们告诉我,公司里有个不在的人让他们那样做。现在我不确定对显然不会与lambdas一起使用的接口进行注释是不是一个好主意。 现在我看到了一个有用的信息,就是人们甚至在服务中也在使用anotation。我就像一个代码: