您是否有 Java 8 功能接口的列表(不是 java.util.function 中列出的接口)?

2022-09-03 04:13:23

我正在尝试查看是否有任何方法可以获得Java 8中所有功能接口的列表。我不是在谈论此页面上的列表:

https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html

相反,我说的是比较器,FileFilter和Runnable等接口 - API文档显示的接口功能如下:

@FunctionalInterface公共接口可运行

在某个地方有这些的完整列表吗?

谢谢!


答案 1

API文档中提供了所有接口的注释列表,当您浏览到FunctionalInterface的类文档并单击顶部的USE链接时。@FunctionalInterface

但必须强调的是,注释的存在并不是使接口成为功能接口的强制性要求。每个接口都有一个与方法不匹配的方法,可以通过 lambda 表达式或方法引用来实现,尽管这并不一定意味着结果将满足为特定 指定的附加协定。abstractpublicjava.lang.Objectinterface

JRE 中大约有 200 个接口满足了技术约束,因此当您尝试通过 lambda 表达式实现它们时,编译器不会反对。其中只有少数人有注释。一些没有注释的人仍然可以顺利工作,例如,,或,而其他那些由于其他约束(如,,,)而不适合。这在“为什么 JDK 中所有符合条件的接口上都不使用@FunctionalInterface?”中也对此进行了讨论。ActionListenerInvocationHandlerThreadFactoryComparableProtocolFamilyFlavorException

因此,虽然记录了可用作 lambda 表达式或方法引用的目标类型的意图,但其他接口类型可能仍适用于相同的目的,但您必须自己调查协定以得出使用是否合适的结论。@FunctionalInterface


答案 2

使用@GhostCat的 Eclipse 方法,下面是标记为运行时库中的接口的实际列表,不包括:@FunctionalInterfacejava.util.function.*

java.awt.KeyEventDispatcher
java.awt.KeyEventPostProcessor
java.io.FileFilter
java.io.FilnameFilter
java.lang.Runnable
java.lang.Thread.UncaughtExceptionHandler
java.nio.file.DirectoryStream.Filter
java.nio.file.PathMatcher
java.time.temporal.TemporalAdjuster
java.time.temporal.TemporalQuery
java.util.Comparator
java.util.concurrent.Callable
java.util.logging.Filter
java.util.prefs.PreferenceChangeListener
jdk.management.resource.ResourceApprover
jdk.management.resource.ResourceId

推荐