【发布时间】:2012-01-16 15:45:05
【问题描述】:
我想在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中可能吗?如何做呢 ?
【问题讨论】:
-
如果你传递同一个对象,它将引用内存中的同一个对象,实际上它是一个指针。
-
您可以做的是使用单例模式来确保您使用一个设置对象,或者使用观察者模式将观察者更新为您的可观察对象(设置类)
-
即使单例模式也不能保证有效,这取决于 DatabaseConnector 和 Logger 的构造函数的作用。如果他们从配置中复制字段,那么即使您更新配置,这些对象也永远不会看到更改。在这种情况下,唯一的选择就是观察者。
标签: java object pointers reference