Propertiesimplémente Map<Object, Object>- non Map<String, String>.
Vous essayez d'appeler ce constructeur:
public HashMap(Map<? extends K,? extends V> m)
... avec Ket les Vdeux comme String.
Mais Map<Object, Object>n'est pas un Map<? extends String, ? extends String>... il peut contenir des clés et des valeurs sans chaîne.
Cela fonctionnerait:
Map<Object, Object> map = new HashMap<Object, Object>();
... mais cela ne vous serait pas aussi utile.
Fondamentalement, Propertiesje n'aurais jamais dû faire une sous-classe de HashTable... c'est le problème. Depuis la v1, il a toujours été en mesure de stocker des clés et des valeurs non-String, bien que cela soit contraire à l'intention. Si la composition avait été utilisé à la place, l'API aurait pu ne travaillé avec les clés de chaîne / valeurs, et tout aurait été bien.
Vous voudrez peut-être quelque chose comme ceci:
Map<String, String> map = new HashMap<String, String>();
for (String key : properties.stringPropertyNames()) {
map.put(key, properties.getProperty(key));
}
Hashtable<Object, Object>, même des choses qui ne sont pas des chaînes - même des clés qui ne sont pas des chaînes.