2017-09-22 65 views
0

内访问我有这些可变因素:变量是从内部类

private boolean MineRunning; 
private BigInteger MineProfit; 
etc.... 

我想调用倒数方法:

countdown(MineRunning, MineProfit, MineTime, MineProgressbar, MineProgressstatus); 

约10次​​为不同的事情

的方法:

private void countdown(boolean running, BigInteger profit, BigInteger time, ProgressBar progressBar, int progressStatus) { 
    if(!running && Reference.Storage_Filled.add(profit).compareTo(Reference.Storage_Capacity) == 0 || 
      !running && Reference.Storage_Filled.add(profit).compareTo(Reference.Storage_Capacity) == -1){ 
     running = true; 

     new CountDownTimer(time.longValue(), Reference.countDownInterval.longValue()){ 
      public void onTick(long millisUntilFinished){ 
       progressStatus++; 
       progressBar.setProgress(progressStatus); 
      } 

      public void onFinish(){ 

       Reference.totalGravel = Reference.totalGravel.add(profit); 
       Gravelrefresh(); 

       progressStatus = 0; 
       progressBar.setProgress(progressStatus); 

       running = false; 
      } 
     }.start(); 

    } 
} 

如果我把这个方法我得到一个错误:

variable is accessed from within inner class

我不想让可变因素来final因为我要编辑这些在方法中。我能做些什么呢? 谢谢。

回答

0

如果你的内部类正在一个单独的线程上执行工作,这似乎是这里的情况,你不能从这个内部类访问变量。然而,你可以做什么,你可以将这些变量作为参数传递给你的内部类构造函数,创建新变量,复制它们并进行操作。

或者你只是宣布他们为最终,这在大多数情况下不是问题。

0

任何由内部类访问的变量都必须是final的或者是一个类作用域变量。这是没有办法的。要么不更新这些变量,要么遵循规则。

正常添加最终不是问题。最终并不妨碍你改变一个对象,它只是阻止你分配给参考。你仍然可以调用setProgress之类的函数来改变它的内部状态。

+0

如果我使其最终运行= FALSE;不工作 –

+0

无论如何,这是行不通的 - 你有一个不寻常的函数试图访问和改变一个局部变量。这不可能。这就是规则存在的原因。运行需要是类级别的变量,而不是函数的参数 –

0

如果你做静态

private static boolean MineRunning; 
private static BigInteger MineProfit; 
... 

这些变量,使你的方法参数少

private void countdown(){ 
    //Your code here 
} 
+0

我已经有了这个,但接下来我必须写入倒计数方法15次 –

+0

您为什么要这样做?我相信一切都很有效,直到DECLARING变量和方法在同一个类中。 – Journey

+0

因为我想要一次emaple:倒计时(我的...)和一次倒计时(铲...)每次不同的值 –