java.util.Properties
реализует интерфейс java.util.Map
, поэтому вы можете просто обработать его как таковой и использовать такие методы, как putAll
, чтобы добавить содержимое другого Map
.
Однако, если вы относитесь к ней как к карте, вам нужно быть очень осторожным с этим:
new Properties(defaultProperties);
Это часто ловит людей, потому что выглядит как конструктор копирования, но это не так. Если вы используете этот конструктор, а затем вызываете что-то вроде keySet()
(унаследованное от его Hashtable
суперкласса), вы получите пустой набор, поскольку Map
методы Properties
не учитывают значение по умолчанию Properties
объект, который вы передали в конструктор. Значения по умолчанию распознаются, только если вы используете методы, определенные в Properties
, например, getProperty
и propertyNames
, среди других.
Так что, если вам нужно объединить два объекта Properties, безопаснее сделать это:
Properties merged = new Properties();
merged.putAll(properties1);
merged.putAll(properties2);
Это даст вам более предсказуемые результаты, чем произвольно помечать один из них как набор свойств "по умолчанию".
Обычно я бы рекомендовал не рассматривать Properties
как Map
, потому что это (на мой взгляд) ошибка реализации с ранних дней Java (Properties должна была содержать Hashtable
, а не расширять его - это был ленивый дизайн), но анемичный интерфейс, определенный в Properties
, не дает нам много вариантов.