1

可能重复:
“this”引用在构造过程中转义?

我想知道是否在此实例上应用了在构造函数中泄漏 this 的问题,因为我相信构造函数必须调用 setJMenuBar() 方法才能完成其构造,这里是类实现:

public class StaffManagerMainWindow extends JFrame implements ActionListener {

    public StaffManagerMainWindow(String title, Image icon) throws HeadlessException {
        ...
        setJMenuBar();
    }

    private void setJMenuBar() {
        ...
        exitItem.addActionListener(this);
        ...
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
4

2 回答 2

3

我认为构造函数中存在泄漏。您在对象的完全初始化之前传递“this”。

于 2012-04-25T15:23:24.147 回答
1

this如果您的程序是多线程的,那么构造函数中的泄漏可能是一个问题。您将其提供给 exitItem,它可能会在您的构造函数完成之前从另一个线程调用 actionPerformed()。这不行。它可能会非常严重地破坏您的程序,特别是如果您将子类添加到图片中。

改为创建一个 init() 方法和一个工厂方法:

public class StaffManager {
    public static StaffManager create() {
        StaffManager staffManager = new StaffManager();
        staffManager.init();
        return staffManager;
    }

    private StaffManager() {
    }

    private void init() {
        // Add listeners here.
    }
}

编辑:因为 Swing 对象总是在事件调度线程上创建的,所以this在这种情况下泄漏不会有任何影响。不过,我宁愿不这样做。

于 2012-04-25T15:38:35.623 回答