Propertiesattrezzi Map<Object, Object>- non Map<String, String>.
Stai provando a chiamare questo costruttore:
public HashMap(Map<? extends K,? extends V> m)
... con Ked Ventrambi come String.
Ma Map<Object, Object>non è un Map<? extends String, ? extends String>... può contenere chiavi e valori non stringa.
Questo funzionerebbe:
Map<Object, Object> map = new HashMap<Object, Object>();
... ma non ti sarebbe così utile.
Fondamentalmente, Propertiesnon avrebbe mai dovuto essere una sottoclasse di HashTable... questo è il problema. Dalla v1, è sempre stato in grado di memorizzare chiavi e valori non String, nonostante ciò fosse contro l'intenzione. Se invece fosse stata utilizzata la composizione, l'API avrebbe potuto funzionare solo con chiavi / valori stringa e tutto sarebbe andato bene.
Potresti volere qualcosa del genere:
Map<String, String> map = new HashMap<String, String>();
for (String key : properties.stringPropertyNames()) {
map.put(key, properties.getProperty(key));
}
Hashtable<Object, Object>, anche cose che non sono stringhe - anche chiavi che non sono stringhe.