InnerClassが参照する外層local final変数は、いったいどんな意味を持っているのか.
まず、このコードを見てください.
簡単な例として、匿名クラスを使用してbuttonのイベントを処理し、本来は匿名クラスで上位のfinal変数しか参照できないことに慣れていたが、突然、コンストラクション関数ShowAnonymousClassの実行が完了すると、myTextAreaというlocal変数は失効するはずだと考えられた.ボタンをクリックすると、なぜmyTextArea変数がTextAreaオブジェクトへの応用に有効なのか.final変数の具体的な意味はいったい何なのか、googleは、final変数の値や引用だけでは変えられないという説ばかりで、javaの文法規範を調べても見つからない.閉包に似ているのではないでしょうか.
public class ShowAnonymousClass extends JFrame {
Button myButton;
int count;
public ShowAnonymousClass() {
super("Inner Class Frame");
myButton = new Button("click me");
final TextArea myTextArea = new TextArea(); //
getContentPane().add(myButton, BorderLayout.CENTER);
getContentPane().add(myTextArea, BorderLayout.NORTH);
myButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
count++;
myTextArea.setText("button clicked: " + count + " times");
}
});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
ShowAnonymousClass mainFrame = new ShowAnonymousClass();
mainFrame.setSize(300,300);
mainFrame.setVisible(true);
}
}
簡単な例として、匿名クラスを使用してbuttonのイベントを処理し、本来は匿名クラスで上位のfinal変数しか参照できないことに慣れていたが、突然、コンストラクション関数ShowAnonymousClassの実行が完了すると、myTextAreaというlocal変数は失効するはずだと考えられた.ボタンをクリックすると、なぜmyTextArea変数がTextAreaオブジェクトへの応用に有効なのか.final変数の具体的な意味はいったい何なのか、googleは、final変数の値や引用だけでは変えられないという説ばかりで、javaの文法規範を調べても見つからない.閉包に似ているのではないでしょうか.