내가 bukkit 플러그인을 만드는 중이라서, 제가 그래프를 만들려면 MCStats라는 API를 사용하고있는 클래스의 인스턴스를 만들려면 ...과 같이 플로터를 추가루프 내부 기능
mobs.addPlotter(new Metrics.Plotter("Player") {
@Override
public int getValue() {
return 0;
}
});
내가 마지막으로 설정 한 경우하지만 ...는 HashMap,이 같은 idealy 일에서
for(String mob: mobNames) {
mobs.addPlotter(new Metrics.Plotter(mob) {
@Override
public int getValue() {
return Stats.getValue(mob);
}
});
}
그러나 분명히 값을 얻으려면, 그것은, 폭도 변수에 액세스 할 수 없습니다, 그것은 여전히 않을 수 있습니다 루프에서 변경하십시오. 이 문제를 해결하려면 어떻게해야합니까?
왜'getValue()'는 Plotter 생성자에 전달 된 mob 이름을 사용하지 않습니까? – sjr
루프 변수를 '최종'으로 설정하지 않는 이유는 무엇입니까? 그렇게하면 각 반복을 변경할 수는 있지만 반복 할 때마다 * 변경하지는 않습니다. –
@sjr - 'mob'를 생성자에 전달해도 이름의 새 범위가 만들어지지 않습니다. getValue의'mob'에 대한 참조는 생성자 매개 변수가 아니라 루프 변수에 대한 것입니다. OP의 문제는 'final'이 아니면 내부 클래스가 로컬 변수를 참조 할 수 없다는 것입니다. –