从内部类中访问变量

时间:2017-09-22 14:42:22

标签: java android variables methods

我有这些变量:

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,因为我必须在方法中编辑这些变量。我该怎么做? 感谢。

3 个答案:

答案 0 :(得分:0)

如果你的内部类在一个单独的线程上执行工作(这里似乎就是这种情况),你就无法从这个内部类中访问变量。但是,您可以将这些变量作为参数传递给内部类构造函数,创建新变量,复制它们并进行操作。

或者你只是声明它们是最终的,这在大多数时候都不是问题。

答案 1 :(得分:0)

内部类访问的任何变量必须是final或者是类范围的变量。没有办法解决这个问题。要么不更新这些变量,要么遵守规则。

添加final通常不是问题。 Final不会阻止您改变对象,它只会阻止您分配引用。您仍然可以调用setProgress之类的函数来更改其内部状态。

答案 2 :(得分:0)

如果将这些变量设为静态

,该怎么办?
private static boolean MineRunning;
private static BigInteger MineProfit;
...

使你的方法参数减少

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