java 闭包解决方法

标签 java

我有 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/

相关文章:

java - 套接字仅接受一个客户端

java - 获取用户在 TextView 中设置的 Short 值

java - 周期开销是不连续的吗?

java - 如何更改以不同显示尺寸显示 fragment 的方式?

java - 监控队列 - ConcurrentLinkedQueue?

java - 蓝牙 : Service discovery failed

macOs Sierra 中的 Java 小程序崩溃

java - 在 Actionscript 3 中从 Java Servlet 接收 ByteArray

java - log4j自定义配置

java - 解决了无论如何要在不创建另一个扫描仪的方法中执行此操作吗?