阅读时,有一个示例说以下代码段将导致构造方法中的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()
方法。