問題タブ [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.

0 投票する
1 に答える
697 参照

java - Java 8 における関数型インターフェースの定義

Java 8 の機能的インターフェースの定義は、次のように述べています。

関数型インターフェイスは、明示的に宣言された抽象メソッドを 1 つだけ 持つインターフェイスとして定義されます。(インターフェイスには抽象化されていないデフォルト メソッドが含まれる場合があるため、修飾が必要です。) これが、関数型インターフェイスが単一抽象 メソッド (SAM)インターフェイスと呼ばれていた理由です。この用語は、今でも時々見られます。

では、どうしてこうなったのでしょうか:

sortメソッドListは次のとおりです。

そして、ラムダ式は次のように述べています。

ラムダ式は機能インターフェースに割り当て可能であるべきです

このComparatorインターフェースには、 および で注釈が付けられた 2 つの抽象メソッドがcompareありequalsます@FunctionalInterface。これは、抽象メソッドが 1 つしかない関数型インタフェースの定義に違反していませんか?

0 投票する
11 に答える
135266 参照

java - Java 8 で使用される関数型インターフェースとは何ですか?

Java 8 で「機能的インターフェース」という新しい用語に出くわしました。ラムダ式で作業しているときに、その使用法を 1 つしか見つけることができませんでした。

Java 8 はいくつかの組み込み機能インターフェースを提供します。機能インターフェースを定義したい場合は、@FunctionalInterfaceアノテーションを利用できます。インターフェイスで単一のメソッドのみを宣言できるようになります。

例えば:

ラムダ式を操作する以外に、Java 8 でどのくらい便利ですか?

(ここでの質問は、私が尋ねたものとは異なります。ラムダ式を扱うときに関数型インターフェースが必要な理由を尋ねています。私の質問は、ラムダ式での使用以外に、関数型インターフェースの他の用途は何ですか?)

0 投票する
1 に答える
156 参照

java - 機能インターフェースのみを含むメソッドを 1 つに統合する方法はありますか?

私は多くのクラスを持っており、それぞれが実装GeneralInterfaceし、場合によっては追加の機能インターフェースを持っています:

MyObjectTypeXXXこれらのインスタンスを保持するリストがあります

および 20 ~ 40 の機能インターフェイス。以下に 2 つの例を示します。

iterateコードのさまざまな場所で、さまざまなメソッドを呼び出す必要があります。

私の問題はiterate、オブジェクトがそのインターフェイスを実装しているかどうかを確認し(キャストして)、指定された引数で唯一の抽象メソッドを呼び出している間、すべての機能インターフェイスのメソッドを維持する必要があることです。

構文または設計によって、これを行うメソッドを 1 つだけ維持する方法はありますか? リフレクションを使用すると、これを行うには悪い方法があることを知っています(調査を行ったことを示すためだけに表示していますが、望んでいません):

0 投票する
1 に答える
1000 参照

java - Java 8 メソッド リファレンス 複数の異なるコンストラクタ

Runnable クラスのコンストラクターを受け取り、入力されたコンストラクターに従って特定の方法で実行するメソッドを作成しようとしています。

だから私はこのようなことができるようにしたい:

私の質問はexecuteInParallel、パラメーターで定義した Runnable コンストラクターを渡すことができるようにするには、どのようにメソッドを定義すればよいですか? 基本的に私の質問は、それを行うために、このメソッドをどのように定義すればよいですか? void executeInParallel(??){ ... }

ただし、関数インターフェイスにパラメーターとして準拠するメソッドしか持てないようです。そのため、executeInParallel複数のxRunnable::newコンストラクターを受け入れる単一のパラメーターで定義することはできません。ある種のファクトリーを使用せずにこれを行う方法はありますか?パターン?

これを行う理由は、インスタンスではなくコンストラクターを渡したいからです。executeInParallel の外でインスタンスを生成することはできません。そのメソッド内で生成する必要があります。また、さまざまなパラメーターを取るさまざまなコンストラクター渡したい

前もって感謝します

編集 申し訳ありませんが、うまくいけば、質問をもう少し明確にしました。

0 投票する
2 に答える
603 参照

java - Java 機能インターフェース

私はJava8を初めて使用し、インターネットでこのトピックに関するいくつかのことを読みました。現時点では、機能的なインターフェースとは何かを理解しようとしています。いくつかの例を見つけましたが、 Skipインターフェイスには 2 つのメソッドが定義されているため、機能的なインターフェイスである理由がわかりません。誰かが私に少し説明してくれることを願っています。コードは次のとおりです。

0 投票する
4 に答える
1105 参照

java - JAVA 8 で述語インターフェイスが異なるのはなぜですか?

Java 8 では、さまざまな述語インターフェース (DoublePredicate、LongPredicate、IntPredicate など) が提供されています。インターフェイスを実装して独自のコードを記述しようとしている場合、異なる述語インターフェイスを使用する利点は何ですか? 1 つの述語インターフェイスだけではないのはなぜですか?

0 投票する
0 に答える
63 参照

java - 1 つの引数で機能インターフェースを呼び出すための 2 つの引数を使用する Java メソッド参照

次のような式を書くことがどのように有効なのか、私にはよくわかりません。

なぜなら:

  1. nullsLastComparatorを引数として受け入れます
  2. 2 つの引数を受け入れるComparatorisの関数メソッドcompare(T, T)
  3. compareTo1 つの引数のみを受け入れます
  4. 二重コロン演算子がなければ、次のように書きます。 Comparator<String> stringComp = Comparator.nullsLast((s1, s2) -> s1.compareTo(s2));

つまり、1 つの引数のみを受け入れるメソッドでダブルコロン演算子を使用すると、ラムダの 2 番目の引数をパラメーターとして使用して、ラムダの最初の引数でメソッドを呼び出す必要があると推測されるということですか? それは私にとって非常に驚くべきことです。