Вам нужно использовать какую-то форму системы уведомлений, чтобы выполнить то, что вы пытаетесь сделать. Наблюдатель / наблюдаемая или какая-то система, основанная на событиях, со слушателями, которые заинтересованы в изменениях, действительно единственный путь.
Вы, безусловно, могли бы создавать объекты настроек безопасности потока (например, DatabaseSettings), которые можно обновлять, и, следовательно, потребитель объекта получит новые значения, но это будет работать только в самых простых случаях. Проблема этого подхода заключается в том, что результаты нескольких обращений к экземпляру настроек станут противоречивыми. Предполагая, что в объекте настроек есть несколько параметров, которые связаны друг с другом, если один параметр получен, объект обновлен, а затем получен следующий параметр, у вас нет возможности узнать, что два вызова вызвали несогласованность ( друг другу) значения.
Например:
dbSettings.getConnectionUrl();
dbSettings.getUsername();
Если dbSettings обновляется между этими двумя вызовами, то имя пользователя и соединение больше не будут совпадать.
Другая проблема заключается в том, что если кто-то извлечет определенные значения из объекта настроек и сохранит их в другой переменной или классе, он не сможет узнать, что он изменился.
Это делает использование этих классов очень жестким и подверженным ошибкам.