根据this文章,在下面的示例中,建议引用"此"被隐式转义。
现在,非静态内部类的实例只能使用外部类的实例构建,现在在下面的示例中,在EventListener2
的构造函数中创建了EventListener
的新实例,以便如何来这个"这个"被隐含地转义。我知道内部类隐含了对外部类的引用,但这里指的是按照文章"这个"隐含地逃脱了,我无法理解"这个"如果被转义,我会同意一个不完整构造的EventListener
被逃脱但不能同意#34;这个"。
public class EventListener2 {
public EventListener2(EventSource eventSource) {
eventSource.registerListener(
new EventListener() {
public void onEvent(Event e) {
eventReceived(e);
}
});
}
public void eventReceived(Event e) {
}
}
答案 0 :(得分:1)
你接近理解。如果没有对封闭类的引用,就不能实例化非静态内部类。实际上,非静态内部类的实例包含对封闭类的关联实例的引用。因此,您的匿名EventListener
包含对EventListener2
的封闭实例的引用。
要了解这是一个问题的原因,请考虑EventListener2
具有eventReceived(...)
所需的其他字段的(非常可能)方案。想象一下,当您致电registerListener(...)
时,其他字段尚未初始化。通过注册接收器,可以在eventReceived(...)
完全初始化之前调用EventListener2
。