問題タブ [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 投票する
8 に答える
5085 参照

java - コンパレータが等しいと宣言するのはなぜですか?

Comparatorインターフェースには独自のequals()メソッドがあります。すべてのクラスはequals()、デフォルトでObjectクラスを介して取得されます。equals()インターフェイス内にメソッドを含める必要はありますか?

0 投票する
8 に答える
8964 参照

java - Java8での「機能インターフェイス」の正確な定義

最近、Java 8の調査を開始しましたが、Javaによるラムダ式の実装に不可欠な「関数型インターフェース」の概念を完全に理解することはできません。Javaのラムダ関数に関するかなり包括的なガイドがありますが、機能インターフェイスの概念を定義する章に行き詰まりました。定義は次のとおりです。

より正確には、機能インターフェイスは、1つの抽象メソッドを持つインターフェイスとして定義されます。

次に、彼は例に進みます。その1つはComparatorインターフェースです。

Comparator引数の代わりにラムダ関数を使用できることをテストできました(つまりCollections.sort(list, (a, b) -> a-b))。

ただし、Comparatorインターフェースでは、メソッドcompareequalsメソッドの両方が抽象的です。つまり、2つの抽象メソッドがあります。では、定義でインターフェイスに1つの抽象メソッドが必要な場合、これはどのように機能するのでしょうか。ここで何が欠けていますか?

0 投票する
5 に答える
16492 参照

java - Java 8 - 機能インターフェースと抽象クラス

Java 8 の機能を調べていて、「Functional Interface」に出会いました。

私の理解によると、これらのインターフェイスには、次のようなデフォルトで実装されたメソッドをいくつか含めることができます。

しかし、私の疑問は、これが抽象クラスの目的であるということです。

機能的インターフェースを導入する理由。

0 投票する
6 に答える
36841 参照

java - サプライヤーであることを宣言することは可能ですか?例外をスローする必要がありますか?

だから私は次のコードをリファクタリングしようとしています:

手始めに、次のことを思いつきました。

Supplierただし、をスローできないため、(明らかに) コンパイルされませんIOException。のメソッド宣言にそれを追加する方法はありますgetFromConfig?

または、次のようにする唯一の方法ですか?

更新Supplier、メソッドしかないため、インターフェイスが本当に単純なものであることに気付きましたget()。私が拡張した本来の理由Supplierは、デフォルトのメソッドなどの基本的な機能を無効にすることです。

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

java-8 - Java 8 の ToIntFunction が機能しない理由拡張機能

ToIntFunction インターフェイスを記述した場合、次のように、それがプリミティブな int を返す単なる関数であるという事実をインターフェイスにエンコードしたいと思います。

私が疑問に思っていたのは、Java 8 API 設計者がプリミティブな代替手段を関数から完全に分離しておくことを選択した説得力のある理由があるのでしょうか? 彼らがそうすることを検討し、それに反対したという証拠はありますか? Consumer (Function<T, Void> の可能性があります) や Supplier (Function<Void, T>) など、他の「特別な」機能インターフェイスの少なくとも一部についても、同様の質問があると思います。

私はこれのすべての影響について非常に深く徹底的に考えていないので、おそらく何かが欠けている.

ToIntFunction (およびその他のプリミティブな汎用関数インターフェイス) が Function とこの関係を持っていた場合、Function パラメーターが期待される場所でそれを使用できるようになります (思いつくのは、myFunction.compose(myIntFunction) の呼び出しなど、他の関数との構成です)。または、上記のような自動 (非) ボックス化の実装で十分な場合に、API にいくつかの特殊な関数を記述することを避けるため)。

これは、この質問と非常によく似ています: Java 8 の Predicate<T> が Function<T, Boolean> を拡張しないのはなぜですか。したがって、関数の単純なプリミティブ代替のこの場合の質問を再定式化しています。セマンティクスはなく、プリミティブとラップされた型だけであり、null ラップされたオブジェクトの可能性さえも排除されます。

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

java - 既存のインターフェースを機能的なインターフェースに変える方法はありますか?

私はこれに沿ったものに見えるインターフェースを使用しています:

また、現在、匿名クラスを使用してインターフェイスを実装していますが、2 つのメソッドのいずれかは気にしません。これに沿った何か:

今、私は Java 8 で可能な限り新しいラムダ式を使用してきましたが、このような状況では追加された単純さを使用したいと考えています。結局のところ、メソッドの 1 つしか実装していませんが、インターフェイスにメソッドが 2 つあるため、ラムダ式で使用することはできません。

この制限を回避する方法はありますか?