我试图了解是否有任何方法可以获得Java 8中所有函数接口的列表。我不是说这一页上的清单:
https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html
相反,我说的是比较器、FileFilter和Runnable接口,这些接口的API文档显示的功能如下:
@FunctionalInterface公共接口可运行
有完整的清单吗?
谢谢!
发布于 2017-03-22 18:31:42
当浏览到@FunctionalInterface并单击顶部的使用链接时,有一个用API文档中可用的使用注释的所有接口的列表。
但是必须强调的是,注释的存在是功能接口。每个具有与public方法不匹配的java.lang.Object方法的接口都可以通过lambda表达式或方法引用来实现,尽管这并不一定意味着结果将满足为特定interface指定的附加契约。
有JRE中大约200个满足技术约束的接口,所以当您试图通过lambda表达式实现它们时,编译器不会反对它们。其中只有少数有注释。一些没有注释的用户仍将顺利工作,例如ActionListener、InvocationHandler或ThreadFactory,而另一些则由于Comparable、ProtocolFamily、FlavorException等附加约束而不合适。这一点在“为什么@FunctionalInterface不用于JDK中符合条件的所有接口?”中也有讨论。
因此,虽然@FunctionalInterface记录了将其用作lambda表达式或方法引用的目标类型的意图,但其他接口类型可能仍然适用于同一目的,但您必须自己研究这些契约,以得出使用是否合适的结论。
发布于 2017-03-22 03:57:42
使用@鬼猫 Eclipse方法,以下是运行时库中标记为@FunctionalInterface的实际接口列表,不包括java.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发布于 2017-03-22 03:47:41
解决办法:例如,您可以使用eclipse来收集这样的列表。
只需跳入该注释的源,然后在全局搜索它的使用情况。
或者,您可以使用反射和编写代码来扫描某个JAR中的所有类,以检查每个类是否正在使用该注释。这将需要一些努力,但我不认为有任何重大障碍,这只是坐下来做。
但当然,真正的答案可能是:这可能是一个xy问题;我们应该关注“为什么”,您认为您需要知道这一点。
https://stackoverflow.com/questions/42942351
复制相似问题