익명 클래스와 람다 식의 다른 동작과 약간 혼동됩니다.익명 클래스의 "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