SE8 ラムダ式のthisの扱い

ラムダ式は関数型インタフェースの匿名クラスと同様だが、若干違う部分もある。
その違いがthisの扱いになる。

通常の匿名クラスではthisは自分自身となるが、ラムダ式の場合thisはラムダ式を定義した外側のクラスのインスタンスになる。
次の例を考える。

public class LambdaTest {
	@FunctionalInterface
	interface Function {
		void func();
	}
	public LambdaTest() {
		Function func1 = new Function() {
			@Override
			public void func() {
				System.out.println(Anon Class:  + this.getClass());
			}
		};
		Function func2 = () -> System.out.println(Lambda Exp.:  + this.getClass());
		func1.func();
		func2.func();
	}
	public static void main(String... args) throws Exception {
		new LambdaTest();
	}
}

この結果は次のようになり、匿名クラスでは自分自身のクラス名が出力されるが、ラムダ式ではラムダ式を定義しているLambaTestクラスが出力される。

C:\lambda>java LambdaTest
Anon Class: class LambdaTest$1
Lambda Exp.: class LambdaTest

投稿者 java

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です