私はC++でのポインタへのAAのポインタのようなものであるJavaでオブジェクトを宣言したいが、私はあなたに例を示しましょう:更新オブジェクトが更新されたオブジェクトへのすべての参照(リファレンスを参照)
//*** 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で可能ですか?どのようにそれを行うことができますか?
同じオブジェクトを渡すと、メモリ内の同じオブジェクトを参照するため、事実上ポインタになります。 –
シングルトンパターンを使用して、1つの設定オブジェクトまたはオブザーバーパターンを観察者(オブザーバー)に更新することを確実にすることです(設定クラス) –
シングルトンパターンでも動作することは保証されません。 DatabaseConnectorとLoggerのコンストラクタは何をしますか?彼らが設定からフィールドをコピーする場合、あなたが設定を更新しても、それらのオブジェクトは決して変更を見ることはありません。その場合、唯一のオプションはオブザーバです。 – Hiro2k