这几天复习了 lambda ,发现有个细节,十分难以理解,那就是 lambda 里的 this指针。
Lambda 里的this指针指向其所属的内部类, 是怎么实现的呢?
写了一个例子,作为测试:
|
|
对应的jvm 机器码是:
通过方法签名可以知道,如果一个类没有带 this,被编译成了一个静态内部类方法。
带 this:
对应的 jvm 机器码:
lambda 被编译成了一种内部类!这就能说通了。
结论:
lambda一般情况下会被编译成静态匿名方法,引用的外部变量以参数的方式传递。
如果 lambda 里使用了this 指标,则被编译为匿名内部方法,以让 this 指针指向lambda 外部类。