在Java中,’this’可以通过哪些方式逃脱?

前端之家收集整理的这篇文章主要介绍了在Java中,’this’可以通过哪些方式逃脱?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

最佳答案
从构造函数调用对象的任何实例方法会将此泄漏到该mathod.只要该方法在您的控制之下(不是可公开覆盖的),这可能没问题,并且您确保不会从中进一步泄漏.使用this作为任何方法的参数当然是更明确的变体,当你说x.addEventListener(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
  }
}

在所有这些情况下,这将是作为方法参数传递的对象的封闭实例.另一方面,如果声明一个静态嵌套类,它将不具有封闭实例.

原文链接:https://www.f2er.com/java/438121.html

猜你在找的Java相关文章