Wie kann ich eine Map sicher auf eine Hash-Map übertragen?Sichere Umwandlung in Hash-Karte
I Klasse Guss Ausnahme
HashMap<String, String> hMap;
public void setHashMap(Map map){
hMap = (HashMap<String, String>) map;
}
Wie kann ich eine Map sicher auf eine Hash-Map übertragen?Sichere Umwandlung in Hash-Karte
I Klasse Guss Ausnahme
HashMap<String, String> hMap;
public void setHashMap(Map map){
hMap = (HashMap<String, String>) map;
}
vermeiden wollen Wenn Sie eine (flache) machen wollen kopieren:
HashMap<String, String> copy = new HashMap<String, String>(map);
Wenn Sie nur dies tun wollen, wenn es nicht bereits eine HashMap ist :
HashMap<String, String> hashMap =
(map instanceof HashMap)
? (HashMap) map
: new HashMap<String, String>(map);
Sie tun können:
if (map instanceof HashMap) {
hMap = (HashMap<String, String>) map;
} else {
//do whatever you want instead of throwing an exception
}
oder einfach die Besetzung mit einem try/catch umgeben und die Ausnahme erfassen, wenn es passiert.
Angenommen von Natürlich ist 'map' kein' HashMap
Sie sollten nicht auf HashMap! Auf Karte umwandeln!
Wenn Sie wirklich einen Grund für Ihre Frage haben, müssen Sie eine neue HashMap erstellen, falls Map keine Instanz von Map ist.
Aber das ist eine schlechte Idee.
Ihre Funktion sollte wie folgt sein, um jede Art von Ausnahme wie ClassCastException
oder NullPointerException
zu vermeiden. Hier wird jede Art von Map
Objekt HashMap
in Ihr Feld der Klasse zugeordnet.
public void setHashMap(Map<String, String> map) {
if (map != null && map instanceof HashMap<?, ?>) {
hMap = (HashMap<String, String>) map;
} else if (map != null) {
hMap.putAll(map);
}
}
Wenn du immer gehst davon aus, dass es sich um ein HashMap<String, String>
ist, warum dies nicht nur tun?
HashMap<String, String> hMap;
public void setHashMap(HashMap<String, String> map){
hMap = map;
}
Wenn Sie etwas allgemeinere wollen, dass jeder Map
akzeptieren:
public void setHashMap(Map<String, String> map){
if (map != null)
hMap = new HashMap<String, String>(map);
else
hMap = new HashMap<String, String>();
}
Kein Casting erforderlich. In Ihrem Beispiel fehlte auch der Rückgabetyp. Ich habe angenommen, dass Sie void
setzen wollten.
Im Allgemeinen können Sie keine Map
in eine HashMap
ohne Risiko einer Klassenausnahme schreiben. Wenn die Map
eine TreeMap
ist, dann wird (und muss) der Cast fehlschlagen.
können Sie vermeiden die Ausnahme unter Verwendung instanceof
machen die Art zu überprüfen, bevor Sie werfen, aber wenn der Test sagt „kein HashMap“ Sie stecken bleiben. Du kannst die Besetzung nicht arbeiten lassen.
Die praktischen Lösungen sind:
hMap
als Map
kein HashMap
,Map
Einträge in eine neu erstellte Kopie HashMap
oder(Keiner dieser Ansätze wird in allen Fällen funktionieren ...aber ich kann nicht eine spezifische Empfehlung, ohne weitere Einzelheiten machen, was die Karte für verwendet wird.)
Und während Sie gerade dabei sind, könnte es angemessen sein, einen Fehlerbericht mit den Anbietern der problematischen einreichen Bibliothek. Sie zu zwingen, eine bestimmte Map-Implementierung zu verwenden, ist (auf den ersten Blick) eine schlechte Idee.
Warum sollte 'setHashMap()' eine 'Map' erfordern, wenn wirklich eine' HashMap' benötigt wird? –
Was meinst du mit "sicher"? Was möchtest du tun, wenn es nicht gegossen werden kann? Wäre eine Kopie akzeptabel? – Thilo
Eine externe Bibliothek, die ich benutze, wird mit einer Hashmapp anstelle einer regulären Schnittstelle implementiert ... :( – Stainedart