問題タブ [functional-interface]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java 8 における関数型インターフェースの定義
Java 8 の機能的インターフェースの定義は、次のように述べています。
関数型インターフェイスは、明示的に宣言された抽象メソッドを 1 つだけ 持つインターフェイスとして定義されます。(インターフェイスには抽象化されていないデフォルト メソッドが含まれる場合があるため、修飾が必要です。) これが、関数型インターフェイスが単一抽象 メソッド (SAM)インターフェイスと呼ばれていた理由です。この用語は、今でも時々見られます。
では、どうしてこうなったのでしょうか:
sort
メソッドList
は次のとおりです。
そして、ラムダ式は次のように述べています。
ラムダ式は機能インターフェースに割り当て可能であるべきです
このComparator
インターフェースには、 および で注釈が付けられた 2 つの抽象メソッドがcompare
ありequals
ます@FunctionalInterface
。これは、抽象メソッドが 1 つしかない関数型インタフェースの定義に違反していませんか?
java - Java 8 で使用される関数型インターフェースとは何ですか?
Java 8 で「機能的インターフェース」という新しい用語に出くわしました。ラムダ式で作業しているときに、その使用法を 1 つしか見つけることができませんでした。
Java 8 はいくつかの組み込み機能インターフェースを提供します。機能インターフェースを定義したい場合は、@FunctionalInterface
アノテーションを利用できます。インターフェイスで単一のメソッドのみを宣言できるようになります。
例えば:
ラムダ式を操作する以外に、Java 8 でどのくらい便利ですか?
(ここでの質問は、私が尋ねたものとは異なります。ラムダ式を扱うときに関数型インターフェースが必要な理由を尋ねています。私の質問は、ラムダ式での使用以外に、関数型インターフェースの他の用途は何ですか?)
java - 機能インターフェースのみを含むメソッドを 1 つに統合する方法はありますか?
私は多くのクラスを持っており、それぞれが実装GeneralInterface
し、場合によっては追加の機能インターフェースを持っています:
MyObjectTypeXXX
これらのインスタンスを保持するリストがあります
および 20 ~ 40 の機能インターフェイス。以下に 2 つの例を示します。
と
iterate
コードのさまざまな場所で、さまざまなメソッドを呼び出す必要があります。
私の問題はiterate
、オブジェクトがそのインターフェイスを実装しているかどうかを確認し(キャストして)、指定された引数で唯一の抽象メソッドを呼び出している間、すべての機能インターフェイスのメソッドを維持する必要があることです。
構文または設計によって、これを行うメソッドを 1 つだけ維持する方法はありますか? リフレクションを使用すると、これを行うには悪い方法があることを知っています(調査を行ったことを示すためだけに表示していますが、望んでいません):
java - Java 8 メソッド リファレンス 複数の異なるコンストラクタ
Runnable クラスのコンストラクターを受け取り、入力されたコンストラクターに従って特定の方法で実行するメソッドを作成しようとしています。
だから私はこのようなことができるようにしたい:
私の質問はexecuteInParallel
、パラメーターで定義した Runnable コンストラクターを渡すことができるようにするには、どのようにメソッドを定義すればよいですか? 基本的に私の質問は、それを行うために、このメソッドをどのように定義すればよいですか?
void executeInParallel(??){ ... }
ただし、関数インターフェイスにパラメーターとして準拠するメソッドしか持てないようです。そのため、executeInParallel
複数のxRunnable::new
コンストラクターを受け入れる単一のパラメーターで定義することはできません。ある種のファクトリーを使用せずにこれを行う方法はありますか?パターン?
これを行う理由は、インスタンスではなくコンストラクターを渡したいからです。executeInParallel の外でインスタンスを生成することはできません。そのメソッド内で生成する必要があります。また、さまざまなパラメーターを取るさまざまなコンストラクターを渡したい
前もって感謝します
編集 申し訳ありませんが、うまくいけば、質問をもう少し明確にしました。
java - Java 機能インターフェース
私はJava8を初めて使用し、インターネットでこのトピックに関するいくつかのことを読みました。現時点では、機能的なインターフェースとは何かを理解しようとしています。いくつかの例を見つけましたが、 Skipインターフェイスには 2 つのメソッドが定義されているため、機能的なインターフェイスである理由がわかりません。誰かが私に少し説明してくれることを願っています。コードは次のとおりです。
java - JAVA 8 で述語インターフェイスが異なるのはなぜですか?
Java 8 では、さまざまな述語インターフェース (DoublePredicate、LongPredicate、IntPredicate など) が提供されています。インターフェイスを実装して独自のコードを記述しようとしている場合、異なる述語インターフェイスを使用する利点は何ですか? 1 つの述語インターフェイスだけではないのはなぜですか?
java - 1 つの引数で機能インターフェースを呼び出すための 2 つの引数を使用する Java メソッド参照
次のような式を書くことがどのように有効なのか、私にはよくわかりません。
なぜなら:
nullsLast
Comparator
を引数として受け入れます- 2 つの引数を受け入れる
Comparator
isの関数メソッドcompare(T, T)
compareTo
1 つの引数のみを受け入れます- 二重コロン演算子がなければ、次のように書きます。
Comparator<String> stringComp = Comparator.nullsLast((s1, s2) -> s1.compareTo(s2));
つまり、1 つの引数のみを受け入れるメソッドでダブルコロン演算子を使用すると、ラムダの 2 番目の引数をパラメーターとして使用して、ラムダの最初の引数でメソッドを呼び出す必要があると推測されるということですか? それは私にとって非常に驚くべきことです。