加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 19:20:06 所属栏目:Java 来源:网络整理
导读:关于为什么starting a thread inside the constructor is not a good idea ,有一个关于Stack Overflow的问题.我意识到这样的事情的结果将是“这个”可以逃脱.我还读到publishing a EventListener from constructor也是一个坏主意,出于同样的原因.我应该注意

关于为什么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
  }
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读