PropertiesGeräte Map<Object, Object>- nicht Map<String, String>.
Sie versuchen, diesen Konstruktor aufzurufen:
public HashMap(Map<? extends K,? extends V> m)
... mit Kund Vbeides als String.
Aber Map<Object, Object>ist nicht Map<? extends String, ? extends String>... es kann Schlüssel und Werte enthalten, die keine Zeichenfolgen sind.
Das würde funktionieren:
Map<Object, Object> map = new HashMap<Object, Object>();
... aber es wäre nicht so nützlich für dich.
Grundsätzlich Propertieshätte niemals eine Unterklasse von HashTable... das ist das Problem. Seit v1 ist es immer möglich, Nicht-String-Schlüssel und -Werte zu speichern, obwohl dies gegen die Absicht ist. Wenn stattdessen Komposition verwendet worden wäre, hätte die API nur mit Zeichenfolgenschlüsseln / -werten funktionieren können, und alles wäre gut gewesen.
Vielleicht möchten Sie so etwas:
Map<String, String> map = new HashMap<String, String>();
for (String key : properties.stringPropertyNames()) {
map.put(key, properties.getProperty(key));
}
Hashtable<Object, Object>, auch Dinge, die keine Zeichenfolgen sind - sogar Schlüssel, die keine Zeichenfolgen sind.