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

Java 8中“函数接口”的精确定义

吕森
2023-03-14

更准确地说,函数接口被定义为恰好具有一个抽象方法的任何接口。

然后,他继续举例,其中一个是comparator接口:

public interface Comparator<T> {
    int compare(T o1, T o2);
    boolean equals(Object obj);
} 

我能够测试我可以使用lambda函数来代替比较器参数,并且它可以工作(即collections.sort(list,(a,b)->a-b))。

但是在比较器接口中,compareequals方法都是抽象的,这意味着它有两个抽象方法。那么,如果定义要求接口只有一个抽象方法,那么这怎么能起作用呢?我错过了什么?

共有1个答案

戚学文
2023-03-14

从您链接到的同一页面:

接口比较器是功能性的,因为尽管它声明了两个抽象方法,但其中一个-Equals--具有与Object中的公共方法相对应的签名。接口总是声明与Object的公共方法相对应的抽象方法,但它们通常是隐式地这样做的。无论是隐式声明还是显式声明,此类方法都被排除在计数之外。

我真的不能说得更好。

 类似资料:
  • 更准确地说,函数接口定义为具有一个抽象方法的任何接口。 然后他继续介绍示例,其中一个是接口: 我能够测试是否可以使用lambda函数代替比较器参数,并且它能够工作(例如)。

  • 主要内容:1 Java8 函数式接口的介绍,2 Java8 函数式接口的案例1,3 Java8 函数式接口的案例2,4 Java8 函数式接口的错误示范,5 Java8 函数式接口的案例3,6 Java8 预定义函数式接口1 Java8 函数式接口的介绍 完全包含一种抽象方法的接口称为函数式接口。函数式接口可以具有任意数量的默认静态方法,但只能包含一个抽象方法。函数式接口还可以声明对象类的方法。 函数式接口也称为单一抽象方法接口或SAM接口。它是Java8 中的新功能,有助于实现函数编程方法。

  • (这里的问题和我问的不一样,是问为什么我们在使用lambda表达式的同时需要函数接口,我的问题是:除了使用lambda表达式之外,函数接口还有哪些其他用途?)

  • 函数接口定义为恰好有一个显式声明的抽象方法的任何接口。(限定是必要的,因为接口可能具有非抽象的默认方法。)这就是为什么函数接口过去被称为单一抽象方法(SAM)接口的原因,这个术语现在仍然有时会出现。 那么我们为什么会有这个: 因为中的方法是:

  • 问题内容: 关于Java8 内置 功能接口,我遇到了许多问题,包括this,this和this。但是所有人都问“为什么只有一种方法?” 或“如果使用功能接口执行X,为什么会出现编译错误”等。我的问题是: 当我仍然可以在自己的接口中使用lambda时,这些新功能接口的存在目的 是 什么 ? 考虑一下oracle文档中的以下示例代码: 好的,很好,但这可以通过上面自己的示例来实现(带有单个方法的接口已