Java Lambda 表达式中的this是 “表达式调用者对象”,匿名内部类的的this是 “匿名内部类对象本身”。
如下
public class TestMain {
public static void main(String[] args) {
new TestMain().test();
}
private void test(){
Function<String, String> fnc = new Function<String, String>() {
@Override
public String apply(String s) {
System.out.println(this.getClass().getName());
return "";
}
};
String thisName = fnc.apply("");
}
}
输出结果如下
com.machine.TestMain$1
public class TestMain {
public static void main(String[] args) {
new TestMain().test();
}
private void test(){
Function<String, String> fnc = (s)->{
System.out.println(this.getClass().getName());
return "";
};
String thisName = fnc.apply("");
}
}
输出结果如下
com.machine.TestMain
从结果中可以看出Lambda中的this就是TestMain
的对象实例,而匿名内部类的中的则是匿名内部类对象本身。
也就是说 Lambda 表达式并非只是匿名内部类的简写,它还更改了表达式中this的绑定对象。