Propertiesimplementos Map<Object, Object>- no Map<String, String>.
Estás intentando llamar a este constructor:
public HashMap(Map<? extends K,? extends V> m)
... con Ky Vambos como String.
Pero Map<Object, Object>no es un Map<? extends String, ? extends String>... puede contener claves y valores que no sean cadenas.
Esto funcionaría:
Map<Object, Object> map = new HashMap<Object, Object>();
... pero no te sería tan útil.
Fundamentalmente, Propertiesnunca debería haber sido una subclase de HashTable... ese es el problema. Desde v1, siempre ha sido posible almacenar claves y valores que no son de cadena, a pesar de que eso va en contra de la intención. Si se hubiera utilizado la composición en su lugar, la API solo podría haber funcionado con claves / valores de cadena, y todo habría ido bien.
Es posible que desee algo como esto:
Map<String, String> map = new HashMap<String, String>();
for (String key : properties.stringPropertyNames()) {
map.put(key, properties.getProperty(key));
}
Hashtable<Object, Object>, incluso cosas que no son cadenas, incluso teclas que no son cadenas.