Java 8の機能インターフェイスであるすべてのインターフェイスのリストを取得する方法があるかどうかを確認しようとしています。このページのリストについては話していません。
https://docs.Oracle.com/javase/8/docs/api/Java/util/function/package-summary.html
むしろ、私はComparator、FileFilter、Runnableなどのインターフェイスについて話しています-APIドキュメントが示すインターフェイスは次のように機能します:
@FunctionalInterface public interface Runnable
これらの完全なリストはどこかにありますか?
ありがとうございました!
FunctionalInterface
のクラスドキュメント を参照して [〜#〜] use]をクリックすると、APIドキュメントで利用可能な_@FunctionalInterface
_で注釈が付けられているすべてのインターフェイスのリストがあります。 [〜#〜] 上部のリンク。
ただし、注釈の存在は interface
を機能インターフェイスにするために必須ではありません であることを強調する必要があります。 _Java.lang.Object
_のabstract
メソッドと一致しないpublic
メソッドが1つだけある各インターフェースは、ラムダ式またはメソッド参照を介して実装できますが、必ずしも結果が特定のinterface
に指定された追加のコントラクトを満たすことを意味するわけではありません。
JREには技術的な制約を満たす約200のインターフェイス があるため、ラムダ式を介してそれらを実装しようとしても、コンパイラは反対しません。それらのいくつかだけが注釈を持っています。注釈が付いていないものの中には、スムーズに機能するものもあります。 ActionListener
、InvocationHandler
、またはThreadFactory
ですが、Comparable
、ProtocolFamily
、FlavorException
などの追加の制約のため、その他は不適切です。これについては、「 JDK内の適格なすべてのインターフェースで@FunctionalInterfaceが使用されないのはなぜですか? 」でも説明されています。
したがって、_@FunctionalInterface
_はラムダ式またはメソッド参照のターゲットタイプとして使用できるという意図を文書化していますが、他のインターフェイスタイプも同じ目的に適している場合がありますが、コントラクトを自分で調べて、使用が適切な。
@ GhostCat's 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
回避策:たとえばEclipseを使用してそのようなリストを収集できる場合があります。
そのアノテーションのソースにジャンプして、その使用法をグローバルに検索するだけです。
または、リフレクションを使用してコードを記述し、JAR内のすべてのクラスをスキャンして、各クラスがそのアノテーションを使用しているかどうかを確認することもできます。それにはいくらかの努力が必要ですが、そこに到達するための大きな障害は見られません。それはただ座ってそれをすることについてです。
しかしもちろん、本当の答えは次のようになります。これはおそらくxyの問題です。そして、私たちはむしろあなたがこれについて知る必要があるとあなたが考える「理由」に焦点を合わせるべきです。
@FunctionalInterface
のUsesページへのリンクは次のとおりです。 ses of Class @FunctionalInterface
以下は、すべて一般的に使用され、意味的に中立なものであり、引数と戻り値の型とともにリストされています。
ここで利用可能な完全なリスト: 関数型インターフェースのリスト (programming.guide)
実行可能 → BiConsumer <T、U> T、U→ BiFunction <T、U 、R> T、U→R BinaryOperator <T> T、T→T BiPredicate <T、U> T、U→boolean BooleanSupplier →boolean Consumer <T> T→ DoubleBinaryOperator = double、double→double DoubleConsumer double→ DoubleFunction <R> double→R DoublePredicate double→boolean DoubleSupplier →double DoubleToIntFunction double→int DoubleToLongFunction double→long DoubleUnaryOperator double→double Function <T、R> T→R IntBinaryOpera tor int→int IntConsumer int→ IntFunction <R> int→R IntPredicate int→boolean IntSupplier →int IntToDoubleFunction int→double IntToLongFunction = int→long IntUnaryOperator int→int LongBinaryOperator long、long→long LongConsumer = long→ LongFunction <R> long→R LongPredicate long→boolean LongSupplier =→long LongToDoubleFunction long→double LongToIntFunction long→int LongUnaryOperator long→ long ObjDoubleConsumer <T> T、double→ ObjIntConsumer <T> T、int→ ObjLongConsumer <T> T、long→ - Predicate <T> T→boolean Supplier <T> →T ToDoubleBiFunction <T、U> T 、U→double ToDoubleFunction <T> T→double ToIntBiFunction <T、U> T、U→int ToIntFunction <T> T→int ToLongBiFunction <T、U> T、U→long ToLongFunction <T > T→long naryOperator <T> T→T