Leicht umwandeln Map<String, Object> zu Map<String, String>
Einer API, die ich verwende, hat eine Methode, die zurückgibt einen Map<String, Object>
, aber ich kenne die Object
's sind String
's in diesem Fall, so möchte ich es als Map<String, String>
.
Aber aus irgendeinem Grund kann ich nicht einfach casten, Java sagt Map<String, Object>
können nicht gegossen werden, um Map<String, String>
aus irgendeinem Grund.
Verwendet habe ich:
Map<String, Object> tempMap = someApiMethodReturningAMap();
Map<String, String> map = new HashMap<String, String>();
for (String i : tempMap.keySet()) {
map.put(i, String.valueOf(tempMap.get(i)));
}
als ein workaround, aber gibt es einen einfacheren Weg?
- Das ist einfach und verständlich, ich würde nur empfehlen, ändern Sie den cast zu 'String.valueOf()' - Sie brauchen, um eine sinnvolle impl der toString () - Methode des Objekts arg.
- Vielen Dank, bearbeitet.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut Sie können nicht sicher werfe es ein
Map<String, String>
denn obwohl Sie wissen, du hast nur strings als Werte, die der compiler nicht. Das ist wie erwartet:arbeiten - es nicht; Sie müssen explizit Stimmen.
Ebenfalls können Sie explizit hier gewirkt, auch, wenn Sie gehen über
Object
:Nun erhalten Sie eine Warnung, die sagen, dass es ein deaktiviert Besetzung, denn im Gegensatz zu den früheren "Objekt zu string" umgewandelt wird, es gibt keine Hinrichtung-Zeit überprüfen, ob es wirklich gültig. Type-erasure bedeutet, dass eine Karte nicht wirklich wissen, seine Schlüssel/Wert-Typen. So dass man am Ende mit der Prüfung nur erfolgt, wenn die Elemente abgerufen werden:
Also, wenn Sie wirklich wollen, um zu vermeiden, erstellen eine neue Karte, dieses "cast über
Object
" funktioniert - aber es ist weit von ideal.Dein Ansatz ist sicherer, obwohl Sie es machen kann, etwas effizienter durch die Vermeidung der-Suche:
Java 8 Lösung:
Gute Lösungen hier, aber ich möchte hinzufügen, eine andere, die unter Berücksichtigung der Handhabung
null
Werte: