如何解决for循环中的局部引用变量?

pat*_*957 5 java swing loops final

我正在编写一个Swing应用程序并尝试创建一个菜单,其中每个菜单项都有自己的操作:

以下是我想要解决的问题:

private void createGameLevelMenuItems(JMenu menu){
    for (int i = 0; i<10; i++) {
        JMenuItem item = new JMenuItem(new AbstractAction("Level-" + i) {
            @Override
            public void actionPerformed(ActionEvent e) {
                game.loadGame(i);
                board.refresh();
                pack();
            }
        });
        menu.add(item);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我不能使用loadGame(i),因为它说i必须是最终的.我理解这个的原因,但我不知道如何解决这个问题.

bru*_*uno 4

快速技巧:在循环的每次迭代中定义一个最终变量,该变量采用(非最终)值i并使用它:

private void createGameLevelMenuItems(JMenu menu){

  for (int i = 0; i<10; i++) {
    final int j = i;   // <--- this line do the thing
    JMenuItem item = new JMenuItem(new AbstractAction("Level-" + j) {
        @Override
        public void actionPerformed(ActionEvent e) {
            game.loadGame(j);
            board.refresh();
            pack();
        }
    });
    menu.add(item);
  }
}
Run Code Online (Sandbox Code Playgroud)