Propertiesnarzędzia Map<Object, Object>- nieMap<String, String> .
Próbujesz wywołać tego konstruktora:
public HashMap(Map<? extends K,? extends V> m)
... ze Ki Vzarówno jakoString .
Ale Map<Object, Object>nie jestMap<? extends String, ? extends String> ... może zawierać klucze i wartości niebędące łańcuchami.
To zadziała:
Map<Object, Object> map = new HashMap<Object, Object>();
... ale nie byłoby to dla ciebie tak przydatne.
Zasadniczo Propertiesnigdy nie powinno się tworzyć podklasy HashTable… w tym tkwi problem. Od wersji 1 zawsze był w stanie przechowywać klucze i wartości inne niż łańcuchowe, mimo że było to sprzeczne z intencją. Gdyby zamiast tego użyto kompozycji, API mogłoby mieć tylko z kluczami / wartościami w postaci ciągów i wszystko byłoby dobrze.
Możesz chcieć czegoś takiego:
Map<String, String> map = new HashMap<String, String>();
for (String key : properties.stringPropertyNames()) {
map.put(key, properties.getProperty(key));
}
Hashtable<Object, Object>, nawet rzeczy, które nie są łańcuchami - nawet klucze, które nie są łańcuchami.