У вас есть список функциональных интерфейсов Java 8 (не те, которые перечислены в java.утиль.функция)?

Я пытаюсь увидеть, есть ли способ получить список всех интерфейсов в Java 8, которые являются функциональными интерфейсами. Я не говорю о списке на этой странице:

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

скорее, я говорю об интерфейсах, таких как Comparator, FileFilter и Runnable - интерфейсы, которые показывает документ API, функциональны следующим образом:

@FunctionalInterface общественный интерфейс Runnable в

есть ли полный список этих где-нибудь?

спасибо!

4 ответов


существует список всех интерфейсов, аннотируемых с помощью @FunctionalInterface доступно в документации по API, когда вы переходите к FunctionalInterfaceдокументация по классу и нажмите на кнопку использовать ссылка вверху.

но необходимо подчеркнуть, что наличие аннотации не обязательно делать interface функционального интерфейса. Каждый интерфейс, имеющий ровно один abstract метод, не соответствующий public метод java.lang.Object может быть реализовано с помощью лямбда-выражений или ссылок на методы, хотя это не обязательно означает, что результат будет выполнять дополнительные контракты, указанные для конкретного interface.

здесь примерно 200 интерфейсов в JRE, выполняющих технические ограничения, поэтому компилятор не будет возражать, когда вы пытаетесь их реализовать с помощью лямбда-выражения. Только некоторые из них имеют аннотации. Некоторые из тех, у кого нет аннотации, все равно будут работать гладко, например,ActionListener, InvocationHandler или ThreadFactory, в то время как другие не подходят из-за дополнительных ограничений типа Comparable, ProtocolFamily, FlavorException. Это также обсуждается в разделе"почему @FunctionalInterface не используется на всех интерфейсах в JDK, которые квалифицируются?"

пока @FunctionalInterface документирует намерение использоваться в качестве целевого типа лямбда-выражения или ссылки на метод, другие типы интерфейса могут по-прежнему подходить для той же цели, но вы должны исследуйте контракты самостоятельно, чтобы заключить, подходит ли использование.


обходной путь: вы можете использовать eclipse, например, для сбора такого списка.

просто перейдите к источнику этой аннотации, а затем выполните глобальный поиск ее использования.

в качестве альтернативы вы могли бы использовать отражение и написать код для сканирования всех классов в баночку, чтобы проверить каждый класс, если он использует эту аннотацию. Это потребует некоторых усилий, но я не вижу никаких серьезных препятствий для достижения этого; это просто сесть и сделать это.

но конечно, реальный ответ может быть: это, вероятно, проблема xy; и мы должны сосредоточиться на "почему" вы думаете, что вам нужно знать об этом.


используя @GhostCat это!--5--> метод 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

для полноты, вот список всех интерфейсов JRE, которые могут быть реализованы с помощью лямбда-выражения или ссылки на метод, хотя не все из них были бы полезны или семантически правильны при реализации таким образом. Этот список не включает расширенные API, такие как JavaFX.

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.Unreferenced
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
javax.activation.DataContentHandlerFactory
javax.imageio.IIOParamController
javax.imageio.event.IIOReadWarningListener
javax.imageio.event.IIOWriteWarningListener
javax.imageio.metadata.IIOMetadataController
javax.imageio.spi.ServiceRegistry.Filter
javax.management.DescriptorRead
javax.management.NotificationFilter
javax.management.NotificationListener
javax.management.openmbean.CompositeDataView
javax.management.remote.JMXAddressable
javax.management.remote.JMXAuthenticator
javax.management.remote.JMXConnectorProvider
javax.management.remote.JMXConnectorServerProvider
javax.naming.NameParser
javax.naming.Referenceable
javax.naming.event.NamingListener
javax.naming.ldap.HasControls
javax.naming.spi.InitialContextFactory
javax.naming.spi.InitialContextFactoryBuilder
javax.naming.spi.ObjectFactory
javax.naming.spi.ObjectFactoryBuilder
javax.naming.spi.StateFactory
javax.net.ssl.HandshakeCompletedListener
javax.net.ssl.HostnameVerifier
javax.print.FlavorException
javax.print.event.PrintJobAttributeListener
javax.print.event.PrintServiceAttributeListener
javax.security.auth.callback.CallbackHandler
javax.sound.midi.ControllerEventListener
javax.sound.midi.MetaEventListener
javax.sound.sampled.LineListener
javax.sql.RowSetReader
javax.sql.RowSetWriter
javax.swing.JComboBox.KeySelectionManager
javax.swing.ListCellRenderer
javax.swing.Painter
javax.swing.UIDefaults.ActiveValue
javax.swing.UIDefaults.LazyValue
javax.swing.event.CaretListener
javax.swing.event.ChangeListener
javax.swing.event.HyperlinkListener
javax.swing.event.ListSelectionListener
javax.swing.event.RowSorterListener
javax.swing.event.TableModelListener
javax.swing.event.TreeSelectionListener
javax.swing.event.UndoableEditListener
javax.swing.table.TableCellRenderer
javax.swing.text.Highlighter.HighlightPainter
javax.swing.text.Position
javax.swing.text.TabExpander
javax.swing.text.ViewFactory
javax.swing.tree.RowMapper
javax.swing.tree.TreeCellRenderer
javax.tools.DiagnosticListener
javax.tools.OptionChecker
javax.xml.bind.ValidationEventHandler
javax.xml.crypto.KeySelectorResult
javax.xml.crypto.NodeSetData
javax.xml.crypto.URIDereferencer
javax.xml.crypto.XMLStructure
javax.xml.stream.EventFilter
javax.xml.stream.StreamFilter
javax.xml.stream.XMLReporter
javax.xml.stream.XMLResolver
javax.xml.stream.util.XMLEventConsumer
javax.xml.transform.URIResolver
javax.xml.ws.AsyncHandler
javax.xml.ws.Provider
javax.xml.ws.handler.HandlerResolver
javax.xml.xpath.XPathFunction
javax.xml.xpath.XPathFunctionResolver
javax.xml.xpath.XPathVariableResolver
org.omg.CORBA.DomainManagerOperations
org.omg.CORBA.portable.InvokeHandler
org.omg.CORBA.portable.ValueBase
org.omg.CORBA.portable.ValueFactory
org.omg.IOP.CodecFactoryOperations
org.omg.PortableInterceptor.PolicyFactoryOperations
org.omg.PortableServer.AdapterActivatorOperations
org.w3c.dom.DOMErrorHandler
org.w3c.dom.UserDataHandler
org.w3c.dom.events.DocumentEvent
org.w3c.dom.events.EventListener
org.w3c.dom.ls.LSResourceResolver
org.w3c.dom.views.AbstractView
org.w3c.dom.views.DocumentView
org.xml.sax.EntityResolver