Java: "Cannot refer to a non-final variable inside an inner class [...]",OS X 和 Windows 之间的区别

标签 java eclipse windows macos

我从 OS X 上的 Eclipse 中开发的项目中获取了一些代码。问题是,当代码在 Windows 上运行时,我会收到错误消息,但在 OS X 上运行时却不会出现错误消息。

以下是在程序的main函数中完成的。

Mainbus mainbus = new Mainbus();    

    (new Thread(new Runnable(){
        @Override
        public void run(){
            MatlabProxyConnection matlabproxy = new MatlabProxyConnection();
            mainbus.setMatlabProxyConnection(matlabproxy);
            matlabproxy.startMatlab("quiet");
        }
    })).start();

当我尝试在 Windows 上运行代码时,我收到一条错误消息:

"Cannot refer to a non-final variable inside an inner class defined in a different method."

看来Windows上的Eclipse更严格;这实际上是代码中的一个错误,必须修复。让它在两个系统上工作的最佳解决方案是什么?将 mainbus 的声明更改为 Final 的最佳解决方案是,还是应该定义一个实现 Thread 的新类,以便可以在构造函数中传递 mainbus ?

最佳答案

final Mainbus mainbus = ...;

后来放宽了final限制,局部变量不被赋值,即该变量可以被设为final。所以把它定为最终的。

主要原因是,在runnable中实际上使用了一个新变量mainbus,因为这两个变量(存储对象指针的内存地址)具有不同的生命周期。

(嵌套)lambda 用法、参数需要放宽。

关于Java: "Cannot refer to a non-final variable inside an inner class [...]",OS X 和 Windows 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32711421/

相关文章:

java - 从通过读取csv创建的spark数据集中删除第一行

java - 导入由 Sparx Enterprise Architect - EAJAVA... 类型导出的 XMI 文件

来自模板化对象的 Java 8 功能构造函数

linux - 克隆正在运行的进程、windows 或 linux 的实例

windows - console2 颜色曝光

java - KeywordAnalyzer 和 LowerCaseFilter/LowerCaseTokenizer

java - 使用 ImageIO 编写透明的 BMP

Eclipse:Git 如何在本地提交后推送

excel - 有没有办法从 CSV 中获取行而不加载整个文件?

java - 具有附加功能的 FTPClient