簡體   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