Propertiesimplementos Map<Object, Object>- não Map<String, String>.
Você está tentando chamar este construtor:
public HashMap(Map<? extends K,? extends V> m)
... com Ke Vambos como String.
Mas Map<Object, Object>não é Map<? extends String, ? extends String>... pode conter chaves e valores que não sejam de string.
Isso funcionaria:
Map<Object, Object> map = new HashMap<Object, Object>();
... mas não seria tão útil para você.
Fundamentalmente, Propertiesnunca deveria ter sido feita uma subclasse de HashTable... esse é o problema. Desde v1, ele sempre foi capaz de armazenar chaves e valores não String, apesar de ser contra a intenção. Se a composição tivesse sido usada em vez disso, a API poderia ter funcionado apenas com chaves / valores de string e tudo estaria bem.
Você pode querer algo assim:
Map<String, String> map = new HashMap<String, String>();
for (String key : properties.stringPropertyNames()) {
map.put(key, properties.getProperty(key));
}
Hashtable<Object, Object>, até mesmo coisas que não sejam strings - até mesmo chaves que não sejam strings.