gpt4 book ai didi

java - 更新对象时更新对对象的所有引用(reference to a reference)

转载 作者:行者123 更新时间:2023-11-30 07:28:54 27 4
gpt4 key购买 nike

我想在 java 中声明一个对象,就像在 C++ 中指向指针的指针,让我给你看一个例子:

//*** At the application startup

//Initialize a settings container class
Settings settings = //Load settings

//Declaring static Application class that contain a reference to the settings container
Application.setSettings(settings);

//Get sub settings from settings container class
DatabaseSettings dbSettings = settings.getDbSettings();
LogSettings logSettings = settings.getLogSettings();

//Initialize components
DatabaseConnector dbConn = new DatabaseConnector(dbSettings);
Logger logger = new Logger(logSettings);

在上面的代码中,我创建了一个设置容器类,其中包含我的应用程序组件的所有设置,然后我将每个子设置类分配给相关组件,此时在程序执行期间我想更新设置并让应用程序的组件看到更新的设置,例如在执行期间我可以用这种方式更新设置容器:

//Update settings through Application static class 
Settings newSettings = //assign updated settings
Application.setSettings(newSettings);

现在的问题是,当我在运行时更新设置容器时,应用程序静态类将包含对 newSettings 实例的更新引用,而每个子设置实例继续引用旧的子设置,因此:

dbConn      ---> settings.getDbSettings()
logSettings ---> settings.getLogSettings()

虽然我希望这两个引用自动引用设置的新实例,所以:

dbConn      ---> newSettings.getDbSettings()
logSettings ---> newSettings.getLogSettings()

它就像一个指向指针的指针...在 Java 中可能吗?如何做呢 ?

最佳答案

在 Java 中,您只有对对象的引用。要引用引用,您需要某种间接访问。例如

AtomicReference<DatabaseSettings> refDatabaseSettings = new AtomicReference<DatabaseSettings>();

refDatabaseSettings.set(dbSettings);

DatabaseSettings dbSettings = refDatabaseSettings.get();

您可以传递 ref 并在一个地方更改它。但是,这不会通知任何引用它已更改,只是允许所有引用在下次检查时看到相同的内容。

关于java - 更新对象时更新对对象的所有引用(reference to a reference),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8882406/

27 4 0
文章推荐: javascript - 想要 : simple HTML file that does disclosure triangle
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com