繁体   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