Технически, вы можете иметь (ссылку) на переменную final
и все равно иметь ее содержимое , динамически заполняемое в более поздний момент:
public static final List<String> listPersons = new ArrayList<>();
//...
public void initialize() {
List<String> contents = populateContentsFromEnvironmentVariable();
listPersons.addAll(contents);
}
Однако, используя "константа mutable-content, такая как эта, вводит возможные проблемы.Например, вам нужно убедиться, что клиентский код не читает список до того, как он будет заполнен.Возможно, вы захотите пересмотреть свой дизайн так, чтобы специфические для среды свойства инициализировались только один раз и предпочтительно инкапсулировались так, чтобы к ним обращались через методы доступа вместо статических констант;это также позволило бы выполнять отложенную инициализацию, инициализацию по требованию, кэширование и т. д.