繁体   English   中英

从内部类中访问变量

[英]Variable is accessed from within inner class

我有这些变量:

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因为我必须在方法中进行编辑。 我该怎么办? 谢谢。

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

或者您只是将它们声明为final,大多数时候这不是问题。

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

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

如果您将这些变量设为静态怎么办

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

并减少您的方法参数

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM