公开"这个"来自构造函数

时间:2017-05-20 23:33:30

标签: java this inner-classes

根据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) {
  }
}

1 个答案:

答案 0 :(得分:1)

你接近理解。如果没有对封闭类的引用,就不能实例化非静态内部类。实际上,非静态内部类的实例包含对封闭类的关联实例的引用。因此,您的匿名EventListener包含对EventListener2的封闭实例的引用。

要了解这是一个问题的原因,请考虑EventListener2具有eventReceived(...)所需的其他字段的(非常可能)方案。想象一下,当您致电registerListener(...)时,其他字段尚未初始化。通过注册接收器,可以在eventReceived(...)完全初始化之前调用EventListener2