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

Eli*_*eth 13 java java-8 functional-interface

我试图看看是否有任何方法可以获得Java 8中作为功能接口的所有接口的列表.我不是在谈论这个页面上的列表:

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

相反,我在谈论像Comparator,FileFilter和Runnable这样的接口--API文档显示的接口是这样的功能:

@FunctionalInterface公共接口Runnable

这些地方有完整的清单吗?

谢谢!

Hol*_*ger 17

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

但必须强调的是,注释的存在并不是制作interface功能界面所必需的.每个接口只有一个abstract方法与一个方法不匹配public,java.lang.Object可以通过lambda表达式或方法引用来实现,但这并不一定意味着结果将满足为特定方法指定的附加合同interface.

JRE大约有200个接口满足技术约束,因此当您尝试通过lambda表达式实现它们时,编译器不会反对.只有少数人有注释.其中有些没有标注的仍然顺利工作,例如ActionListener,InvocationHandler或者ThreadFactory,而另一些是不适合的,由于像附加的约束Comparable,ProtocolFamily,FlavorException.这也在" 为什么不在JDK中符合条件的所有接口上使用@FunctionalInterface?"

因此,虽然@FunctionalInterface文档意图可用作lambda表达式或方法引用的目标类型,但其他接口类型可能仍然适用于相同的目的,但您必须自己调查合同以断定使用是否合适.


Gho*_*ica 5

解决方法:例如,您可以使用 eclipse 来收集这样的列表。

只需跳转到该注释的来源,然后全局搜索它的用法。

或者,您可以使用反射并编写代码来扫描某些 JAR 中的所有类,以检查每个类是否使用该注释。这需要一些努力,但我没有看到任何重大障碍。这只是坐下来做。

但当然,真正的答案可能是:这可能是一个 xy 问题;我们应该更关注您认为需要了解的“为什么”。

  • ...或者你去[官方API文档](https://docs.oracle.com/javase/8/docs/api/),浏览到[`FunctionalInterface`](https://docs.oracle.com /javase/8/docs/api/?java/lang/FunctionalInterface.html) 并单击 [**USE** 链接](https://docs.oracle.com/javase/8/docs/api/java /lang/class-use/FunctionalInterface.html) 在顶部。这真的很容易…… (3认同)
  • 反射对于另一个目的会更有用:它(可能)是找到未明确标有注释的有效功能接口的唯一方法。当然,这需要对类层次结构、默认方法、`Object` 方法等进行更复杂的分析。 (2认同)
  • 那是超级kewl。我实际上去了 javadoc ......但是在我的手机上;我没有看到那个链接。所以我假设注释(与类/接口相反)没有“在此处使用”的信息!克尔。你应该回答这个问题! (2认同)

shm*_*sel 5

使用@GhostCat的 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
Run Code Online (Sandbox Code Playgroud)

  • 唉。不,没有人会到达那里。 (2认同)

Hol*_*ger 5

为了完整起见,这里列出了可以通过 lambda 表达式或方法引用实现的所有 JRE 接口,尽管在以这种方式实现时,并非所有这些接口都是有用的或语义正确的。此列表不包括 JavaFX 等扩展 API。

java.awt.ActiveEvent 
java.awt.Composite 
java.awt.KeyEventDispatcher 
java.awt.KeyEventPostProcessor 
java.awt.PrintGraphics 
java.awt.Stroke 
java.awt.Transparency 
java.awt.datatransfer.ClipboardOwner 
java.awt.datatransfer.FlavorListener 
java .awt.dnd.DragGestureListener 
java.awt.dnd.DragSourceMotionListener 
java.awt.event.AWTEventListener 
java.awt.event.ActionListener 
java.awt.event.AdjustmentListener 
java.awt.event.HierarchyListener 
java.awt.event.ItemListener 
java. awt.event.MouseWheelListener 
java.awt.event.TextListener 
java.awt.event.WindowStateListener 
java.awt.image.ImageObserver
java.awt.image.TileObserver 
java.awt.image.renderable.RenderedImageFactory 
java.awt.print.Printable 
java.awt.print.PrinterGraphics 
java.beans.ExceptionListener 
java.beans.PropertyChangeListener 
java.beans.VetoableChangeListener 
java.beans.beancontext .BeanContextChildComponentProxy 
java.beans.beancontext.BeanContextContainerProxy 
java.beans.beancontext.BeanContextProxy 
java.beans.beancontext.BeanContextServiceRevokedListener 
java.io.Closeable 
java.io.FileFilter 
java.io.FilenameFilter 
java.io.Flushable 
java.io.ObjectInputValidation 
java. lang.AutoCloseable 
java.lang.Comparable 
java.lang.Iterable 
java.lang.Readable
java.lang.Runnable 
java.lang.Thread.UncaughtExceptionHandler 
java.lang.instrument.ClassFileTransformer 
java.lang.management.PlatformManagedObject 
java.lang.reflect.GenericArrayType 
java.lang.reflect.InvocationHandler 
java.net.ContentHandlerFactory 
java.net.CookiePolicy 
java.net.DatagramSocketImplFactory 
java.net.FileNameMap 
java.net.ProtocolFamily 
java.net.SocketImplFactory 
java.net.URLStreamHandlerFactory 
java.nio.file.DirectoryStream.Filter 
java.nio.file.PathMatcher 
java.nio.file.WatchEvent.Modifier 
java.nio.file.attribute.AttributeView 
java.nio.file.attribute.FileAttributeView
java.nio.file.attribute.FileStoreAttributeView 
java.rmi.activation.ActivationInstantiator 
java.rmi.activation.Activator 
java.rmi.server.RMIClientSocketFactory 
java.rmi.server.RMIFailureHandler 
java.rmi.server.RMIServerSocketFactory 
java.rmi.server。未引用的
java.security.DomainCombiner 
java.security.Guard 
java.security.KeyStore.LoadStoreParameter 
java.security.PrivilegedAction 
java.security.PrivilegedExceptionAction 
java.security.cert.CertPathParameters 
java.security.cert.CertPathValidatorResult 
java.security.cert.CertStoreParameters 
java .security.interfaces.DSAKey 
java.security.interfaces.ECKey 
java.security.interfaces.RSAKey
java.security.spec.ECField 
java.sql.DriverAction 
java.time.chrono.Era 
java.time.temporal.TemporalAdjuster 
java.time.temporal.TemporalQuery 
java.util.Formattable 
java.util.Observer 
java.util.concurrent.Callable 
java.util.concurrent.Executor 
java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory 
java.util.concurrent.RejectedExecutionHandler 
java.util.concurrent.ThreadFactory 
java.util.function.BiConsumer 
java.util.function.BiFunction 
java.util.function。 BiPredicate 
java.util.function.BinaryOperator 
java.util.function.BooleanSupplier 
java.util.function.Consumer 
java.util.function.DoubleBinaryOperator
java.util.function.DoubleConsumer 
java.util.function.DoubleFunction 
java.util.function.DoublePredicate 
java.util.function.DoubleSupplier 
java.util.function.DoubleToIntFunction 
java.util.function.DoubleToLongFunction 
java.util.function.DoubleUnaryOperator 
java .util.function.Function 
java.util.function.IntBinaryOperator 
java.util.function.IntConsumer 
java.util.function.IntFunction 
java.util.function.IntPredicate 
java.util.function.IntSupplier 
java.util.function.IntToDoubleFunction 
java. util.function.IntToLongFunction 
java.util.function.IntUnaryOperator 
java.util.function.LongBinaryOperator 
java.util.function.LongConsumer
java.util.function.LongFunction 
java.util.function.LongPredicate 
java.util.function.LongSupplier 
java.util.function.LongToDoubleFunction 
java.util.function.LongToIntFunction 
java.util.function.LongUnaryOperator 
java.util.function.ObjDoubleConsumer 
java .util.function.ObjIntConsumer 
java.util.function.ObjLongConsumer 
java.util.function.Predicate 
java.util.function.Supplier 
java.util.function.ToDoubleBiFunction 
java.util.function.ToDoubleFunction 
java.util.function.ToIntBiFunction 
java. util.function.ToIntFunction 
java.util.function.ToLongBiFunction 
java.util.function.ToLongFunction 
java.util.function.UnaryOperator
java.util.logging.Filter 
java.util.prefs.PreferenceChangeListener 
java.util.spi.ResourceBundleControlProvider 
javax.accessibility.Accessible 
javax.activation.CommandObject