通过Java中的引用等效传递?

时间:2016-10-19 16:49:10

标签: java oop reference

我有两个类来查看和控制模型中的两个对象。视图/控件类是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,即使我已经在{{1}中创建了配置对象}。

2 个答案:

答案 0 :(得分:0)

首先,您应该有一个视图类和一个用于控制器的分隔类

第二个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);
    }
}

答案 1 :(得分:0)

只有那些代码片段,很难确切知道事情应该如何运作。所以我的建议可能没用,但我会尝试:

private viewControl.JConfiguracoesParametros jConfiguracoesParametros1
        = new viewControl.JConfiguracoesParametros();
private viewControl.JEnsaiosDeCampo jEnsaiosDeCampo1
        = new viewControl.JEnsaiosDeCampo(jConfiguracoesParametros1, jSelecaoAspersor1.getDadosAspersor(), new PerfisRadiais());

您的代码更改是我将整个jConfiguracoesParametros1对象传递给新的JEnsaiosDeCampo对象(是田间试验还是什么?)。通过这种方式,JEnsaiosDeCampo对象引用了相同的配置参数对象,对JEnsaiosDeCampo对象可以看到对配置的任何后续更改。

坦率地说,当你评论

时,我对你的理解是否正确有疑问
  

对象实际上是通过值传递的,如java中的所有内容。

对象本身未通过。传递对象的引用(按值)。