局部变量需要声明为final

Sam*_*nch 4 java final jcombobox

我收到错误"从内部类中访问局部变量框;需要声明为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);
}
Run Code Online (Sandbox Code Playgroud)

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

那么有更好的方法来做我在这里做的事情,还是我必须宣布一些事情是最终的?

谢谢

Gre*_*ill 8

由于您没有box在外部代码中进行修改,因此使用final正是解决此问题的正确方法.这是对自己(以及编译器)的承诺,它的值box不会在封闭范围内发生变化.编译器会告诉您是否违反了该承诺.

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