我有 5 个按钮,我需要迭代它们以执行一些初始化操作,如下面的代码所示。然而,Java 阻止我将 i 传递给函数 ScreenFactory.product(),因为由于我读到的一些闭包问题,它不是最终的。我不能将其定为最终的,因为那样会阻止循环中的增量。解决办法是什么?
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]);
}
最佳答案
您可以在标记为 final
的循环内创建一个临时变量(例如 tmp
),使用 i
的值对其进行初始化,然后将 tmp
传递给 product()
调用
关于java 闭包解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10999777/