関数インタフェース(2)
関数インタフェースタイプのパラメータと戻りタイプ
関数インタフェースMyFunctionの定義は次のとおりです.
@FunctionalInterface
interface MyFunction {
void myMethod(); //추상메서드
}
メソッドのパラメータがMyFunctionタイプの場合、このメソッドを呼び出すときは、ラムダ式を参照する参照変数をパラメータとして指定する必要があります.void aMethod(MyFunction f) { //매개변수의 타입이 함수형 인터페이스
f.myMethod(); //MyFunction에 정의된 메서드 호출
}
...
MyFunction f = () -> System.out.println("myMethod()");
aMethod(f);
参照変数がない場合は、以下のようにラムダ式を直接パラメータとして指定してもよい.aMethod(() -> System.out.println("myMethod()")); // 람다식을 매개변수로 지정
また、メソッドの戻りタイプが関数型インタフェースタイプである場合、この関数型インタフェースの抽象メソッドと等価な参照変数を返すか、ram多項式を直接返すことができます.MyFunction myMethod() {
MyFunction f = () -> {};
return f; //이 줄과 윗 줄을 한 줄로 줄이면, return () -> {};
}
ラムダ式は参照変数として用いることができ,これはラムダ式を方法で交換できることを意味する.すなわち,メソッドは変数のように交換できる.ラムド式のタイプとフォーマット変換
ただ,関数型界面はラム多式を参照でき,ラム多式のタイプは関数型界面のタイプと一致しない.ブルーマルチは匿名オブジェクトで、匿名オブジェクトにはタイプがありません.
正確なタイプがありますが、コンパイラがランダムに命名されているのでよくわかりません.
MyFunction f = (MyFunction)(() -> {}); //양변의 타입이 다르므로 형변환 필요
->異形変換は省略できます.ラムダ式には名前はありませんが、オブジェクトタイプに変換できません.
変換できるのは関数型インタフェースのみです.どうしてもやるなら二重で….
(Object)(MyFunction)
Reference
この問題について(関数インタフェース(2)), 我々は、より多くの情報をここで見つけました https://velog.io/@parkheajin39/함수형-인터페이스-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol