循环遍历hashmap以创建具有内部函数的类实例

时间:2012-09-10 17:38:21

标签: java hashmap bukkit mcstats

我正在制作一个bukkit插件,我正在使用一个名为MCStats的API来创建图表,你可以像这样添加绘图...

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,它仍然无法在循环中进行更改。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

事实上,您可以在增强型final循环中使用for

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

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

    });
}

答案 1 :(得分: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”。