我正在尝试查看是否有任何方法可以获取 Java 8 中作为函数式接口(interface)的所有接口(interface)的列表。我不是在谈论此页面上的列表:
https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html
相反,我说的是 Comparator、FileFilter 和 Runnable 等接口(interface) - API 文档显示的接口(interface)功能如下:
@FunctionalInterface 公共(public)接口(interface)可运行
哪里有这些的完整列表?
谢谢!
最佳答案
当您浏览到 FunctionalInterface
’s class documentation 时,API 文档中会列出所有用 @FunctionalInterface
注释的接口(interface)。然后点击 USE顶部的链接。
但必须强调的是,注解的存在是not mandatory to make an interface
a functional interface .每个接口(interface)只有一个 abstract
方法不匹配 java.lang.Object
的 public
方法可以通过 lambda 表达式或方法引用来实现,尽管这并不一定意味着结果将满足为特定 interface
指定的附加契约(Contract)。
有roughly 200 interfaces in the JRE fulfilling the technical constraints ,因此当您尝试通过 lambda 表达式实现它们时,编译器不会反对。其中只有少数有注释。一些没有注释的人仍然可以顺利工作,例如ActionListener
、InvocationHandler
或 ThreadFactory
,而其他的由于额外的限制而不适用,例如 Comparable
、ProtocolFamily
,FlavorException
。这也在“Why isn't @FunctionalInterface used on all the interfaces in the JDK that qualify?”中进行了讨论。 ”
因此,虽然 @FunctionalInterface
记录了可用作 lambda 表达式或方法引用的目标类型的意图,但其他接口(interface)类型可能仍适用于相同目的,但您必须调查契约自己判断使用是否合适。
关于java - 你有 Java 8 功能接口(interface)列表吗(不是 java.util.function 中列出的那些)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42942351/