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