У вас есть список функциональных интерфейсов 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