首頁  >  問答  >  主體

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实例的隐含引用。

PHPzPHPz2765 天前835

全部回覆(1)我來回復

  • 伊谢尔伦

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

    實話實說多線程、逸出我不是很懂,但是我懂內部類,所以可以來強答一下,內部類、匿名內部類都可以訪問外部類的對象的域,為什麼會這樣,實際上是因為內部類別建構的時候,會把外部類別的物件this隱式的當作一個參數傳遞給內部類別的建構方法,這個工作是編譯器做的,他會為你內部類別所有的建構方法加上這個參數,所以你例子裡的匿名內部類別在你建構ThisEscape時就把ThisEscape創建的物件隱式的傳給匿名內部類別了。至於這樣會出什麼問題我並不明白,似乎是怕onEvent會操作外部類別的私有域?這部分需要你來教我了

    回覆
    0
  • 取消回覆