Java - Accessing variables from an anonymous inner class [duplicate]

泄露秘密 提交于 2019-12-24 10:57:21

问题


Possible Duplicate:
Cannot refer to a non-final variable inside an inner class defined in a different method

I'm just experimenting and have a question.

Why is this acceptable when I am accessing a non-final class variable from an anonymous inner class:

static JLabel e = new JLabel("");
    public static void main(String[] args) {

        JButton b = new JButton("ok");
        b.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                String l = e.getText();

            }

        });

    }

But the following is not acceptable without the final modifier:


回答1:


I modified the class a little below. Hopefully this can help you see the answer.

e.getText() in the original code is just shorthand for SomeClass.e.getText() in the below code. Any class in the same package as SomeClass could make a similar reference to e..

On the other hand, other classes in the same package as SomeClass can not refer to args.

class SomeClass {
    static JLabel e = new JLabel("");
    public static void main(String[] args) {

        JButton b = new JButton("ok");
        b.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                String l = SomeClass.e.getText();

            }

        });

    }
}



回答2:


Because the class variable is static.




回答3:


I answered this question to someone else a few days ago

The answer is that args is out of your scope context. If its not final, it could have changed by the time your actionPerformed method gets called. In that case, you are treating args as a place on another stackframe that may or may not still exist - this is definitely a no no in Java. When you declare args final, it can copy over the variable into your inner class



来源:https://stackoverflow.com/questions/10524635/java-accessing-variables-from-an-anonymous-inner-class

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!