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 回答