最近、Java 8の調査を開始しましたが、Javaによるラムダ式の実装に不可欠な「関数型インターフェース」の概念を完全に理解することはできません。Javaのラムダ関数に関するかなり包括的なガイドがありますが、機能インターフェイスの概念を定義する章に行き詰まりました。定義は次のとおりです。
より正確には、機能インターフェイスは、1つの抽象メソッドを持つインターフェイスとして定義されます。
次に、彼は例に進みます。その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インターフェースでは、メソッドcompare
とequals
メソッドの両方が抽象的です。つまり、2つの抽象メソッドがあります。では、定義でインターフェイスに1つの抽象メソッドが必要な場合、これはどのように機能するのでしょうか。ここで何が欠けていますか?