(翻译)Java SE 8 Lambda 特性与基本原理(下)
6 , 词法域(Lexical Scoping) 确定内部类中变量名字(包括this)的意义要比在顶级类中困难的多,并且很容易出错。继承成员--包括类对象中的方法--可能不小心就覆盖了外部类的声明, 未加限定的this引用总是指向外部类自身。 Lambda表达式更加简单:他们不会从超类中继承任何名字,也不会引入任何新的级别的作用域。相反,他们具有词法作用域,意味着主体中的名字是解释执行的,就像是在封闭的环境中(通过对Lambda表达式形式参数添加名字)。作为一个自然的延伸,this关键字以及对成员的引用与在Lambda表达式的外部类中直接饮用有着相同的意义。 为了说明这点,下面程序将会在控制台上打印两次“Hello, World!”: public class Hello { Runnable r1 = () -> { System.out.println(this); } Runnable r2 = () -> { System.out.println(toString()); } public String toString() { return "Hello, world!"; } public static void main(String... args) { new Hello().r1.run(); new Hello().r2.run(); } }