我收到错误“从内部类内部访问局部变量框;需要声明为final”。看起来不错,但我并不真正认为这是最佳解决方案,因此我希望也许有人可以帮助我。这是我的代码:

public void showPublisherBox(JComboBox box) {
    if (publisherBox == null) {
        publisherBox = new AddPublisherForm();
        publisherBox.setLocationRelativeTo(this);
    }
    publisherBox.addWindowListener(new WindowAdapter()
    {
    public void windowClosing(WindowEvent we)
    {
        this.populatePublishers(box);
    }

        private void populatePublishers(JComboBox box){
            box.setModel(db.getPublishers());
        }
    });
    publisherBox.setVisible(true);
}

Publisher表单只是一个新的JFrame,它会打开并接收一些信息,并且当它关闭时,我希望通过从db.getPublishers()方法设置模型来重新填充JComboBox。

因此,有没有更好的方法来做我在这里要做的事情,还是我必须将某些内容声明为final?

谢谢

最佳答案

由于您没有在外部代码中修改box,因此使用final正是解决此问题的正确方法。对您自己(和对编译器)的保证是box的值在封闭范围内不会改变。编译器会告诉您是否违反了 promise 。

使用final没有编译时间或运行时成本。

07-27 17:25