Propertiesорудия Map<Object, Object>- нетMap<String, String> .
Вы пытаетесь вызвать этот конструктор:
public HashMap(Map<? extends K,? extends V> m)
... с Kи Vобоими какString .
Но Map<Object, Object>это неMap<? extends String, ? extends String> ... он может содержать нестроковые ключи и значения.
Это сработает:
Map<Object, Object> map = new HashMap<Object, Object>();
... но это было бы не так полезно для вас.
По сути, Propertiesникогда не следовало делать подклассом HashTable... вот в чем проблема. Начиная с версии 1, он всегда мог хранить ключи и значения, отличные от String, несмотря на то, что это противоречило намерениям. Если бы вместо этого использовалась композиция, API мог бы иметь только работать со строковыми ключами / значениями, и все было бы хорошо.
Вам может понадобиться что-то вроде этого:
Map<String, String> map = new HashMap<String, String>();
for (String key : properties.stringPropertyNames()) {
map.put(key, properties.getProperty(key));
}
Hashtable<Object, Object>, даже вещи, которые не являются строками - даже ключи, которые не являются строками.