Loop through hashmap to create a class instance with inside functions
Question
I am making a bukkit plugin, and I am using an API called MCStats, to create the graph, you add Plotters like so...
mobs.addPlotter(new Metrics.Plotter("Player") {
@Override
public int getValue() {
return 0;
}
});
But I want to get the values from a HashMap, and idealy something like this...
for(String mob: mobNames) {
mobs.addPlotter(new Metrics.Plotter(mob) {
@Override
public int getValue() {
return Stats.getValue(mob);
}
});
}
But obviously, it can't access the mob variable, if I set it to final, it still wont be able to change in the loop. How can I work around this problem?
Solution
You can, in fact, use final
in an enhanced for
loop:
for(final String mob: mobNames) {
mobs.addPlotter(new Metrics.Plotter(mob) {
@Override
public int getValue() {
return Stats.getValue(mob);
}
});
}
OTHER TIPS
You can use the final keyword for mob and it still be changed in the loop. Try to run this code below:
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() {
}
}
}
The output will be "1" and "2".
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow