1

私は bukkit プラグインを作成しており、MCStats という API を使用してグラフを作成しています。次のように Plotters を追加します...

mobs.addPlotter(new Metrics.Plotter("Player") {

    @Override
        public int getValue() {
            return 0;
        }

});

しかし、私は HashMap から値を取得したいのですが、理想的にはこのようなものです...

for(String mob: mobNames) {
    mobs.addPlotter(new Metrics.Plotter(mob) {

        @Override
            public int getValue() {
                return Stats.getValue(mob);
            }

    });
}

しかし明らかに、mob 変数にアクセスすることはできません。それを final に設定しても、ループ内で変更することはできません。この問題を回避するにはどうすればよいですか?

4

2 に答える 2

2

実際、final拡張forループで使用できます。

for(final String mob: mobNames) {
    mobs.addPlotter(new Metrics.Plotter(mob) {

        @Override
            public int getValue() {
                return Stats.getValue(mob);
            }

    });
}
于 2012-09-10T17:50:11.010 に答える
0

mobのfinalキーワードを使用できますが、ループ内で変更されます。以下のコードを実行してみてください。

public class Test2 {

    public static void main(String args[]) {
        String[] data = new String[] {"1", "2"};
        List<MyClass> test = new ArrayList<MyClass>();
        for (final String word: data) {
            test.add(new MyClass() {
                @Override
                public void testMethod() {
                    System.out.println(word);
                }
            });
        }
        for (MyClass myClass: test) {
            myClass.testMethod();
        }
    }

    static class MyClass {
        public void testMethod() {

        }
    }
}

出力は「1」と「2」になります。

于 2012-09-10T17:54:31.743 に答える