[英]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.