我知道不允许在内部类中使用局部变量。它必须是实例变量或最终变量。 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;
}