Rumah > Soal Jawab > teks badan
这是《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实例的隐含引用。
伊谢尔伦2017-04-18 10:33:22
Sejujurnya, saya tidak tahu banyak tentang multi-threading dan escape, tetapi saya memahami kelas dalaman, jadi saya boleh memberi anda jawapan yang kukuh, kedua-dua kelas dalaman dan kelas dalaman tanpa nama boleh mengakses medan objek luaran kelas. Mengapa ini? Sebenarnya Ini kerana apabila kelas dalam dibina, objek kelas luar ini secara tersirat akan dihantar sebagai parameter kepada pembina kelas dalam, dan ia akan menambah parameter ini kepada semua pembina kelas dalaman anda, jadi kelas dalaman tanpa nama dalam contoh anda secara tersirat menghantar objek yang dicipta oleh ThisEscape kepada kelas dalaman tanpa nama apabila anda membina ThisEscape. Saya tidak tahu apa masalah ini akan menyebabkan Nampaknya saya takut bahawa onEvent akan mengendalikan domain peribadi kelas luaran? Saya perlukan anda untuk mengajar saya bahagian ini