0

5つのボタンがあり、以下のコードに示すように、いくつかの初期化アクションを実行するためにそれらを反復処理する必要があります。ただし、Javaでは、関数ScreenFactory.produce()に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

簡単な回避策は、クロージャ内に最終変数を作成し、それに次の値を割り当てることです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

ScreenFactoryに渡す前に、iを別の変数にロードします。

于 2012-06-12T15:28:20.160 に答える