在Java中通过引用等效?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Java中通过引用等效?相关的知识,希望对你有一定的参考价值。
我有两个类来查看和控制模型中的两个对象。视图/控件类是JPanels。其中一个对象包含一个设备,另一个保存该设备的配置。我正在初始化负责视图/控制配置的类,然后我正在初始化设备的视图/控件,在构造函数中传递配置。问题是当配置对象(在包含它的JPanel内部)中更改配置时,它也必须在设备对象中更改。我想传递配置的引用而不是对象的值,但我知道这在java中是不可能的。有没有相同的东西,还是我必须让听众?如果是这样,我应该使用什么来监听在相应JPanel内部的配置对象中所做的更改?
编辑:这些是变量:
private viewControl.JConfiguracoesParametros jConfiguracoesParametros1;
private viewControl.JEnsaiosDeCampo jEnsaiosDeCampo1;
这就是我初始化它们的方式:
jConfiguracoesParametros1 = new viewControl.JConfiguracoesParametros();
jEnsaiosDeCampo1 = new viewControl.JEnsaiosDeCampo(jConfiguracoesParametros1.getConfig(), jSelecaoAspersor1.getDadosAspersor(), new PerfisRadiais());
我需要的是jEnsaiosDeCampo1始终具有ConfiguracoesParametros1.getConfig()的值。就像我现在的方式,如果我尝试使用jEnsaiosDeCampo1
中依赖于jConfiguracoesParametros1
的任何东西,我会得到一个NullPointerException,即使我已经在jConfiguracoesParametros1
中创建了配置对象。
只有那些代码片段,很难确切知道事情是如何工作的。所以我的建议可能没有用,但我会尝试:
private viewControl.JConfiguracoesParametros jConfiguracoesParametros1
= new viewControl.JConfiguracoesParametros();
private viewControl.JEnsaiosDeCampo jEnsaiosDeCampo1
= new viewControl.JEnsaiosDeCampo(jConfiguracoesParametros1, jSelecaoAspersor1.getDadosAspersor(), new PerfisRadiais());
你的代码的变化是我将整个jConfiguracoesParametros1
对象传递给新的JEnsaiosDeCampo
对象(是田间试验还是什么?)。通过这种方式,JEnsaiosDeCampo
对象具有对相同配置参数对象的引用,并且对JEnsaiosDeCampo
对象可以看到对配置的任何后续更改。
坦率地说,当你评论时,我对你的理解是否正确有疑问
该对象实际上是作为java中的所有内容传递的。
对象本身未通过。传递对象的引用(按值)。
首先,你应该有一个视图类和一个控制器分开的类
第二个java总是通过引用传递
当您更改配置时,您的jpanel应该通过控制器中的public handleConfigChanged(config)之类的方法通知控制器某些内容已被更改。然后该处理程序将该信息发送到设备并询问是否重新加载它。
public class Device{
...
public void reloadConfig(config){
...
}
}
public class Controller{
...
public boolean handleConfigChanged(config){
...
device.reloadConfig(config);
}
}
public class View{
...
private void changeConfig(config){
...
controller.handleConfigChanged(config);
}
}
以上是关于在Java中通过引用等效?的主要内容,如果未能解决你的问题,请参考以下文章
jmeter中通过beanshell访问eclipse中导出jar中的java类的方法