我有这些变量:
private boolean MineRunning;
private BigInteger MineProfit;
etc....
我想调用倒计时方法:
countdown(MineRunning, MineProfit, MineTime, MineProgressbar, MineProgressstatus);
CA。 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();
}
}
如果我调用此方法,我会收到错误:
从内部类中访问变量
我不想将变量赋予final
,因为我必须在方法中编辑这些变量。我该怎么做?
感谢。
答案 0 :(得分:0)
如果你的内部类在一个单独的线程上执行工作(这里似乎就是这种情况),你就无法从这个内部类中访问变量。但是,您可以将这些变量作为参数传递给内部类构造函数,创建新变量,复制它们并进行操作。
或者你只是声明它们是最终的,这在大多数时候都不是问题。
答案 1 :(得分:0)
内部类访问的任何变量必须是final或者是类范围的变量。没有办法解决这个问题。要么不更新这些变量,要么遵守规则。
添加final通常不是问题。 Final不会阻止您改变对象,它只会阻止您分配引用。您仍然可以调用setProgress之类的函数来更改其内部状态。
答案 2 :(得分:0)
如果将这些变量设为静态
,该怎么办?private static boolean MineRunning;
private static BigInteger MineProfit;
...
使你的方法参数减少
private void countdown(){
//Your code here
}