首页  >  问答  >  正文

java如何理解隐式地使this引用逸出

这是《Java并发编程实战》3.2发布与逸出一节中的示例代码。我无法理解,this是怎么逸出的。

//隐式地使this引用逸出(不要这么做)
public class ThisEscape {
    public ThisEscape(EventSource source){
        source.registerListener(new EventListener() {
            public void onEvent(Event e){
                doSomething(e);
            }
        });
    }
}

书上说,当ThisEscape发布EventListener时,也隐含地发布了ThisEscape实例本身,因为在这个内部类的实例中包含了对ThisEscape实例的隐含引用。

PHPzPHPz2717 天前806

全部回复(1)我来回复

  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:33:22

    实话实说多线程、逸出我不是很懂,但是我懂内部类,所以可以来强答一下,内部类、匿名内部类都可以访问外部类的对象的域,为什么会这样,实际上是因为内部类构造的时候,会把外部类的对象this隐式的作为一个参数传递给内部类的构造方法,这个工作是编译器做的,他会给你内部类所有的构造方法添加这个参数,所以你例子里的匿名内部类在你构造ThisEscape时就把ThisEscape创建的对象隐式的传给匿名内部类了。至于这样会出什么问题我并不明白,貌似是怕onEvent会操作外部类的私有域?这部分需要你来教我了

    回复
    0
  • 取消回复