1. ホーム
  2. java

Java 8における「機能インターフェイス」の正確な定義

2023-10-28 16:04:08

質問

最近、Java 8 を調べ始めたのですが、Java のラムダ式の実装に不可欠な "functional interface" の概念がよく理解できません。この概念は かなり包括的なガイド というガイドがありますが、私は 関数型インターフェイスの概念に定義を与える章 . 定義はこうです。

より正確には、関数型インターフェースは、ちょうど1つの抽象的なメソッドを持つ任意のインターフェースとして定義されます。

そして、彼は例を挙げていき、そのうちのひとつは Comparator のインターフェイスを使用しています。

public interface Comparator<T> {
    int compare(T o1, T o2);
    boolean equals(Object obj);
} 

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

しかし、Comparatorインターフェースでは、両方の compareequals メソッドは抽象的であり、それはつまり 2つの抽象的なメソッド . ということで、もし定義がインターフェイスに 正確に1つの抽象メソッド ? 私はここで何を見逃しているのでしょうか?

どのように解決するのですか?

からの リンク先の同じページ :

<ブロッククオート

Comparator インターフェースは2つの抽象的なメソッドを宣言していますが、そのうちの1つである Equals は Object のパブリックメソッドに対応するシグネチャを持っているので、機能的と言えます。インターフェースは常にObjectのパブリックメソッドに対応する抽象メソッドを宣言しますが、通常は暗黙のうちに行います。暗黙的であろうと明示的に宣言されていようと、そのようなメソッドはカウントから除外されます。

うまく言えないのですが