为什么允许局部变量在内部类中被允许用于其他内部时,为什么不允许使用局部变量

时间:2014-11-28 01:22:35

标签: java scope inner-classes

我知道不允许在内部类中使用局部变量。它必须是实例变量或最终变量。 Someone已经说过,这是因为内部类对象可能存在于方法范围之外。

但我想知道它为什么只适用于InnerClasses。什么时候允许其他人。基本上我想知道为什么在方法1没有时允许方法2。

方法1:

MainGUI类

private void initializeGUI(){

    JTextArea rqJTextArea = new JTextArea();
    JTextArea rsJTextArea = new JTextArea();

    JButton button = new JButton("Ok"); // http://www.javaprogrammingforums.com/java-swing-tutorials/278-how-add-actionlistener-jbutton-swing.html

    button.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e){
            rsJTextArea.setText(rsJTextArea.getText() + "\n" + rqJTextArea.getText()); // Cannot refer to a non-final variable rsJTextArea inside an inner class defined in a different method
        }
    }); 

}

方法2:

MainGUI类

private void initializeGUI(){

    JTextArea rqJTextArea = new JTextArea();
    JTextArea rsJTextArea = new JTextArea();

    JButton button = new JButton("Ok");

    SendActionListner sendActionListner = new SendActionListner();
    sendActionListner.setRqJTextArea(rqJTextArea);
    sendActionListner.setRsJTextArea(rsJTextArea);

    button.addActionListener(sendActionListner);   
}

SendActionListner类

public class SendActionListner implements ActionListener {

    public void actionPerformed(ActionEvent e) {

        rsJTextArea.setText(rsJTextArea.getText() + "\n" + rqJTextArea.getText());

    }


    public JTextArea getRqJTextArea() {
        return rqJTextArea;
    }
    public void setRqJTextArea(JTextArea rqJTextArea) {
        this.rqJTextArea = rqJTextArea;
    }
    public JTextArea getRsJTextArea() {
        return rsJTextArea;
    }
    public void setRsJTextArea(JTextArea rsJTextArea) {
        this.rsJTextArea = rsJTextArea;
    }


    JTextArea rqJTextArea = null;
    JTextArea rsJTextArea = null;

}

0 个答案:

没有答案