匿名クラスとラムダ式の異なる動作とちょっと混乱します。匿名クラスとラムダ式の "this"の値
私はラムダ式を使用しています:
//Test.java
Runnable r1 =() -> System.out.println(this);
Runnable r2 =() -> System.out.println(toString());
@Override
public String toString() {
return "Hello World!";
}
// in main method
new Test().r1.run();
new Test().r2.run();
Output : Hello World!
Hello World!
匿名クラス使用:
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println(this);
}
};
Runnable r2 = new Runnable() {
@Override
public void run() {
System.out.println(toString());
}
};
@Override
public String toString() {
return "Hello World!";
}
// in main method
new Test().r1.run();
new Test().r2.run();
Output : [email protected]
[email protected]
誰かが別の動作を説明していただけますか?
答え:ありがとうございます。しかし、字句的に何が結ばれていますか? –
@MehrajMalikこれは、それらが見つかったコンテキストに基づいてコンパイル時にバインドされていることを意味します。 – 4castle
これは 'this'と' super'に影響するだけではありません。匿名の内部クラスの内部では、継承されたメンバ( 'toString()'だけでなく)があるかもしれませんが、ラムダ式は機能インタフェースから何も継承しません。 – Holger