我想从下面的方法返回布尔值,但它给我错误消息说
"Local variable stopped is access from within inner class;
needs to be declared final."
但是,如果我宣布停止为最终决赛,我将无法更改其价值。
我知道这是由于计时器造成的。请提出建议!
public boolean requestTimer(final Club club,final String msisdn, final int time) {
boolean stopped=false;
new java.util.Timer().schedule(
new java.util.TimerTask() {
@Override
public void run() {
stopped=checkStopped(club,msisdn); //this line has the error
}
}, time);
return stopped;
}
最佳答案
我知道这是由于计时器
它与Timer无关,而与尝试在内部类中使用局部变量有关。 Java复制内部类中使用的局部变量的副本,如果原始变量未声明为final,则两个变量(原始变量及其副本)可能会发生更改。
但是,如果我宣布停止为最终决赛,我将无法更改其价值。
真正。所以你不能这样做。一个可能的解决方案是您不使用局部变量。而是使用在类中声明的字段。