在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类的方法

Java中通过Runnable与Thread创建线程的区别

如何在 C++ 中通过引用返回类对象?

如何在Android Java中通过按钮的ID使用OnClickListener属性

无法在 MySQLi 中通过引用传递参数 [重复]

为啥在 PHP 中通过引用传递?