[英]Java: “Cannot refer to a non-final variable inside an inner class […]”, difference between OS X and Windows
我從OS X上的Eclipse開發的項目中獲得了一些代碼。問題是,當代碼在Windows上運行時出現錯誤消息,但在OS X上運行時出現錯誤消息。
在程序的主要功能中進行以下操作。
Mainbus mainbus = new Mainbus();
(new Thread(new Runnable(){
@Override
public void run(){
MatlabProxyConnection matlabproxy = new MatlabProxyConnection();
mainbus.setMatlabProxyConnection(matlabproxy);
matlabproxy.startMatlab("quiet");
}
})).start();
當我嘗試在Windows上運行代碼時,出現錯誤消息:
“不能在用不同方法定義的內部類中引用非最終變量。”
Windows上的Eclipse似乎更嚴格。 這實際上是必須修復的代碼錯誤。 使其在兩個系統上均能工作的最佳解決方案是什么? 是將mainbus的聲明更改為final的最佳解決方案,還是應該定義一個實現Thread的新類,以便可以在構造函數中傳遞mainbus?
剛剛設置mainbus
final
final Mainbus mainbus = new Mainbus();
final Mainbus mainbus = ...;
最終限制后來放寬到未分配給局部變量的位置,即該變量可以設為最終變量。 因此,使其最終。
主要原因是,在可運行狀態下實際上使用了一個新的變量mainbus
因為兩個變量(存儲對象指針的內存地址)具有不同的壽命。
對於(嵌套)lambda使用,參數需要放松。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.