関数インタフェース(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)