【问题标题】:Variable is accessed from within inner class从内部类中访问变量
【发布时间】:2018-03-04 04:35:27
【问题描述】:

我有这些变量:

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();

    }
}

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

从内部类中访问变量

我不想将变量设为final,因为我必须在方法中编辑这些。我能做些什么呢? 谢谢。

【问题讨论】:

    标签: java android variables methods


    【解决方案1】:

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

    或者你只是将它们声明为最终的,这在大多数情况下都不是问题。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 这无论如何都行不通-您有一个异步函数试图访问和更改局部变量。这不可能。这就是规则存在的原因。运行需要是类级别的变量,而不是函数的参数
      【解决方案3】:

      如果你将这些变量设为静态会怎样

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

      并减少你的方法参数

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

      【讨论】:

      • 我已经有了这个但是我必须写15次倒计时方法
      • 你为什么要这样做?我相信在 DECLARING 变量和方法在同一个类中之前,一切都可能正常工作。
      • 因为我想要 emaple 一次:countdown(Mine...) 和一次 countdown(Shovel...) 每次不同的值
      • 我没有得到你!我在问您是否可以尝试将每个变量更改为您想从countdown( ) 方法访问的静态变量。地雷、铲子等
      • 对不起,我不明白这个:/
      猜你喜欢
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      • 2015-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-25
      相关资源
      最近更新 更多