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