¿Cómo resuelvo las variables referenciados locales dentro de un bucle for?

Ptrikl957:

Estoy escribiendo una oscilación aplicación y tratando de hacer un menú en el que cada elemento de menú tiene su propia acción :

Así es como yo quería resolver esto:

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);
    }
}

Sin embargo, no puedo usar loadGame(i), porque dice que itendría que ser final. Yo entiendo la razón de esto, pero no sé cómo funciona mi manera alrededor de ella.

Bruno:

Truco rápida: definir una variable final en cada iteración del bucle que toma el valor (no final) de iy usarlo:

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);
  }
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=178740&siteId=1
Recomendado
Clasificación