gpt4 book ai didi

java - Java 中 'this' 可以通过哪些方式转义?

转载 作者:搜寻专家 更新时间:2023-10-31 20:14:33 25 4
gpt4 key购买 nike

Stack Overflow 上有一个关于为什么 starting a thread inside the constructor is not a good idea 的问题.我意识到这样的事情的结果将是'this'可以逃脱。我还读到publishing a EventListener from constructor出于同样的原因也是一个坏主意。我应该注意哪些其他模式可以逃脱“this”?

最佳答案

从构造函数调用对象的任何实例方法会将 this 泄漏到该方法。这可能没问题,只要该方法在您的控制之下(不可公开覆盖),并且您要确保不会进一步泄漏 this。使用 this 作为任何方法的参数当然是更明确的变体,当您说 x.addEventListener(this) 时就会发生这种情况。一个可能更阴险,因为不太明显,泄漏 this 的方法是不使用 this 本身作为参数,而是使用内部/本地/匿名类的实例,说

public class Main 
{
private class MyListener extends MouseAdapter { ...}

public Main() {
class Listener1 extends MouseAdapter { ... }
someSwingComponent.addMouseListener(new MyListener()); // inner class
someSwingComponent.addMouseListener(new Listener1()); // local class
someSwingComponent.addFocusListener(new FocusAdapter() { ... }); // anonymous
}
}

在所有这些情况下,this 将是作为方法参数传递的对象的封闭实例。另一方面,如果您声明一个 static 嵌套类,它将没有有一个封闭实例。

关于java - Java 中 'this' 可以通过哪些方式转义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11274507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com