Properties
met en œuvre Map<Object, Object>
- pas Map<String, String>
.
Tu essaies d'appeler ce constructeur :
public HashMap(Map<? extends K,? extends V> m)
... avec K
y V
en tant que String
.
Mais Map<Object, Object>
n'est pas un Map<? extends String, ? extends String>
... il peut contenir des clés et des valeurs autres que des chaînes de caractères.
Cela pourrait fonctionner :
Map<Object, Object> map = new HashMap<Object, Object>();
... mais ça ne serait pas aussi utile pour vous.
Fondamentalement, Properties
n'aurait jamais dû devenir une sous-classe de HashTable
... c'est là le problème. Depuis la version 1, il a toujours été possible de stocker des clés et des valeurs autres que des chaînes de caractères, bien que cela soit contraire à l'intention. Si la composition avait été utilisée à la place, l'API aurait pu uniquement fonctionnait avec des clés/valeurs de chaînes, et tout aurait été parfait.
Vous pourriez vouloir quelque chose comme ça :
Map<String, String> map = new HashMap<String, String>();
for (String key : properties.stringPropertyNames()) {
map.put(key, properties.getProperty(key));
}