簡體   English   中英

Java:“無法在內部類[…]中引用非最終變量”,OS X和Windows之間的區別

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM