java如何理解隐式地使this引用逸出
PHPz
PHPz 2017-04-18 10:31:22
0
1
837

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

PHPz
PHPz

学习是最好的投资!

répondre à tous(1)
伊谢尔伦

Pour être honnête, je ne connais pas grand-chose au multi-threading et à l'évasion, mais je comprends les classes internes, je peux donc vous donner une réponse solide. Les classes internes et les classes internes anonymes peuvent accéder aux champs des objets externes. classes.Pourquoi cela ? En fait, c'est parce que lorsque la classe interne est construite, l'objet this de la classe externe sera implicitement passé en paramètre au constructeur de la classe interne, et ce travail est effectué par le compilateur. ajoutera ce paramètre à tous les constructeurs de votre classe interne, de sorte que la classe interne anonyme de votre exemple transmet implicitement l'objet créé par ThisEscape à la classe interne anonyme lorsque vous construisez ThisEscape. Je ne sais pas quels problèmes cela va causer. Il semble que j'ai peur qu'onEvent exploite le domaine privé de la classe externe ? J'ai besoin que tu m'apprennes cette partie

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal