我想从下面的方法返回布尔值,但它给我错误消息说

"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,则两个变量(原始变量及其副本)可能会发生更改。


  但是,如果我宣布停止为最终决赛,我将无法更改其价值。


真正。所以你不能这样做。一个可能的解决方案是您不使用局部变量。而是使用在类中声明的字段。

10-05 18:36