当前位置: 首页 > 知识库问答 >
问题:

变量是从内部类中访问的

钱建本
2023-03-14

我有以下几种:

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

共有3个答案

方安怡
2023-03-14

如果将这些变量设为静态

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

并使您的方法参数更少

private void countdown(){ 
    //Your code here
}
於意蕴
2023-03-14

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

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

薛寒
2023-03-14

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

或者你只是宣布它们是最终的,大多数时候这不是问题。

 类似资料:
  • 问题内容: 在内部类中,可以访问外部类的变量,但不能访问方法的局部变量。我了解了无法访问方法的局部变量的部分,但我想知道为什么外部类变量可以访问? 我的理解是,由于内部类与外部类绑定,因此只要父级可用,子级就可以访问其父级变量。我对么? 问题答案: 假设您的外部类在内部类的范围内(非静态)被称为,以获取该字段。 例如, 其中Outer是类的名称,并标识该字段。 您也可以直接抓取它,但是如果由于阴影

  • 在内部类中,外部类的变量是可访问的,但方法的局部变量不是。我理解了关于方法的局部变量不可访问的部分,但我想知道为什么外部类变量是可访问的? 我的理解是,由于内部类与外部类绑定,因此只要父类可用,子类就可以访问其父变量。我说得对吗?

  • 问题内容: 我正在尝试创建一个JLabel数组,当单击它们时,所有这些标签都应该变为不可见。当试图通过需要访问用于声明标签的循环的迭代变量的内部类设置鼠标侦听器时,就会出现问题。代码是不言自明的: 我以为我可以通过使用内部方法中的(或代替)内部调用来克服此问题,但我一直无法弄清楚。 编译错误是:从内部类内部访问局部变量i;需要宣布为最终` 我敢肯定,答案一定是我从未想过的愚蠢之举,或者我犯了一些小

  • 但是,如果我在内部类中声明了一个同名的variabe呢?有什么方法可以显式引用外部变量吗? 顺便说一句,这和这个问题不同,因为它考虑的是局部堆栈变量。

  • 我的代码有上述错误。我尝试通过将我的btnsav声明为最终版本来修复此问题,但随后我收到另外两个错误: 未知类:“btnsave” 不是一个声明 你知道我如何修复这个错误吗?

  • 问题内容: 这不是直截了当的问题。在我的情况下,外部类变量和内部类setter方法的参数名称相同。喜欢: 现在,我无法初始化外部类实例变量p,因为它指示内部类。再次,我做不到它得到一个错误。现在如何分配外部p,同时将内部Class方法的参数命名为p? 问题答案: 这是您可以/应该这样做的方式: