我有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]);
}
答案 0 :(得分:2)
您可以在标记tmp
的循环中创建一个临时变量(例如final
),使用i
的值对其进行初始化,并将tmp
传递给{ {1}}致电
答案 1 :(得分: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]);
}
答案 2 :(得分:0)
在将i传递给ScreenFactory之前将其加载到另一个变量中。