Java 8でわかるように、関数型インターフェースの概念が導入されています。関数型インターフェースには1つのabstract
メソッドがあり、いくつかのデフォルトまたは静的メソッドが可能です。
しかし、なぜ関数型インターフェースには1つの抽象メソッドしかないのでしょうか。インターフェイスに複数の抽象メソッドがある場合、これが関数型インターフェイスではないのはなぜですか?
Lambda関数を容易にするために、Single Abstract Method Interfaceとも呼ばれる関数型インターフェースが導入されました。ラムダ関数は1つのメソッドの実装しか提供できないため、関数型インターフェースには1つの抽象メソッドのみが必要です。詳細については ここを参照 。
Edit->ここで注目に値するのは、関数型インターフェースがインターフェースにデフォルトの実装を持つことができるということです。上記のリンクで、実装の詳細を確認できます。
関数型インターフェースを使用すると、オブジェクトを関数であるかのように呼び出すことができます。これにより、名詞(オブジェクト)ではなく動詞(関数)をプログラムに渡すことができます。関数型インターフェースの実装は、run、execute、perform、apply、またはその他の一般的な動詞などの名前を使用して、他のメソッドと同様に、明確に定義された単一のアクションを実行します。[1]
Javaが2つの抽象メソッドを持つことを許可した場合、両方のメソッドの実装を提供するにはラムダ式が必要になります。メソッドを呼び出すと、それらからどちらのメソッドを呼び出すかがわからないためです。 2つの抽象メソッド。実装されていないメソッドを呼び出すことができます。たとえば、
もしJavaは、この種の機能インターフェースを許可していたでしょう
@FunctionalInterface
interface MyInterface {
void display();
void display(int x, int y);
}
その場合、以下を実装することは不可能でした。
public class LambdaExpression {
public static void main(String[] args) {
MyInterface ref = () -> System.out.print("It is display from sout");
ref.display(2, 3);
}
}
Display(int x、int y)が実装されていないため、エラーが発生します。そのため、関数型インターフェースは単一の抽象メソッドインターフェースです。