【问题标题】:Java Swing anonymous actionsJava Swing 匿名操作
【发布时间】:2011-03-30 18:12:11
【问题描述】:

可以像下面的代码示例那样设置操作吗?是否有任何可能由此引起的垃圾收集问题?如果不是,最好的方法是什么?

btnAwesomeButton=new JButton(new AbstractAction("Awesome Button") {
    @Override
    public void actionPerformed(ActionEvent arg0) {
        //Do stuff here
        //Refer to the components on parent windows through ParentWindowClass.this.componentName      
    }

});

【问题讨论】:

    标签: java swing


    【解决方案1】:

    这是一个很常见的成语。不存在垃圾回收问题,前提是您没有将 AbstractAction 子类实例的引用存储在某个地方(如哈希表),在 actionPerformed 返回后它将持续存在。

    【讨论】:

    • 我认为这种情况是 Java 添加匿名内部类的动机之一。
    • 这敲响了,既然你提到了它。
    【解决方案2】:

    是的,这是完全正常的。这就是我们所说的anonymous inner class。这个问题根本没有垃圾收集。

    【讨论】:

      【解决方案3】:

      是的,垃圾收集中存在潜在的陷阱。但是,其他答案是正确的,因为它是标准习语。

      当您像这样创建匿名内部类时,它会隐藏对外部类的引用。这意味着只要该按钮与该操作一起存在,外部类仍将被引用,就像该外部类引用的所有内容一样。

      这在实践中通常不是问题,因为外部类通常是该按钮所在的窗口或面板,并且该按钮将与面板一样存在。这就是为什么它是标准习语 - 它通常很好。

      【讨论】:

      • 您的分析是正确的,但它并不是真正的陷阱。更像是说如果你编程就会有错误。
      猜你喜欢
      • 1970-01-01
      • 2016-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-21
      • 2014-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多