gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:11:26 25 4
gpt4 key购买 nike

我从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com