阅读时,有一个示例说以下代码段将导致构造方法中的this指针转义。但是我不确定它的确切含义,因为在this构造函数方法的源代码中看不到任何ThisEscape引用。有任何想法吗?谢谢。

public class ThisEscape {
    public ThisEscape(EventSource source)   {
        source.registerListener(
            new EventListener() {
                public void onEvent(Event e)    {
                    doSomething(e);
                }
            }
        );
    }
}

最佳答案

这意味着由于调用EventListener方法,新的ThisEscape.this对象将有权访问ThisEscape#doSomething()。由于EventListener已注册在EventSource类之外的ThisEscape对象中,因此ThisEscape.this从构造函数中“转义”。更糟糕的是,如果事件是由另一个线程分派和处理的,则可能在构造函数完成之前调用doSomething()方法。

08-06 02:27