0

我有 5 个按钮,我需要遍历它们以执行一些初始化操作,如下面的代码所示。但是,Java 阻止我将 i 传递给函数 ScreenFactory.produce() 因为它不是最终的,因为我读到了一些关闭问题。从那以后我不能让它成为最终的,它会阻止循环中的增量。解决办法是什么?

for(int i = 0; i < 5; ++i) {
            levelButtons[i].setAction(ActionType.GENERAL_ACTION, new GameAction() {

                @Override
                public void execute(int screenID) {
                    Game.instance.changeScreen( ScreenFactory.produce(ScreenFactory.GAME_SCREEN, i));
                }
            });

            TouchHandler.instance.register(levelButtons[i]);
        }
4

3 回答 3

2

tmp您可以在您标记的循环内创建一个临时变量(例如) final,使用 的值对其进行初始化i并传递tmpproduce()调用

于 2012-06-12T15:28:33.963 回答
1

一个简单的解决方法是在闭包内创建一个 final 变量并将其赋值为i

for(int i = 0; i < 5; ++i) 
{
   final int finalI = i;
   levelButtons[i].setAction(ActionType.GENERAL_ACTION, new GameAction() 
   {
       @Override
       public void execute(int screenID) 
       {
         Game.instance.changeScreen( ScreenFactory.produce(ScreenFactory.GAME_SCREEN, finalI));
       }
    });
    TouchHandler.instance.register(levelButtons[i]);
}
于 2012-06-12T15:30:16.493 回答
0

在将 i 传递给 ScreenFactory 之前将其加载到另一个变量中。

于 2012-06-12T15:28:20.160 回答