Ich muss eine leere Karte erstellen.
if (fileParameters == null)
fileParameters = (HashMap<String, String>) Collections.EMPTY_MAP;
Das Problem ist, dass der obige Code diese Warnung erzeugt : Typensicherheit: Deaktivierte Umwandlung von Map in HashMap
Was ist der beste Weg, um diese leere Karte zu erstellen?
java
dictionary
collections
hashmap
JorgeO
quelle
quelle
Antworten:
1) Wenn die Karte unveränderlich sein kann:
Letzteres müssen Sie manchmal verwenden, wenn der Compiler nicht automatisch herausfinden kann, welche Art von Map benötigt wird (dies wird als Typinferenz bezeichnet ). Stellen Sie sich zum Beispiel eine Methode vor, die wie folgt deklariert ist:
Wenn Sie die leere Karte direkt an sie übergeben, müssen Sie den Typ explizit angeben:
2) Wenn Sie die Karte ändern müssen, dann zum Beispiel:
(wie Tehblanx betonte )
Nachtrag : Wenn Ihr Projekt Guava verwendet , haben Sie folgende Alternativen:
1) Unveränderliche Karte:
Zugegeben, keine großen Vorteile hier im Vergleich zu
Collections.emptyMap()
. Aus dem Javadoc :2) Karte, die Sie ändern können:
Maps
enthält ähnliche Factory-Methoden zum Instanziieren anderer Kartentypen, z. B.TreeMap
oderLinkedHashMap
.Update (2018) : Unter Java 9 oder neuer lautet der kürzeste Code zum Erstellen einer unveränderlichen leeren Karte:
... mit den neuen Convenience Factory-Methoden von JEP 269 . 😎
quelle
Collections.emptyMap ()
quelle
Die emptyMap-Methode der Collections-Klasse .
quelle
Wenn Sie eine Instanz von HashMap benötigen, ist der beste Weg:
Da Map eine Schnittstelle ist, müssen Sie eine Klasse auswählen, die sie instanziiert, wenn Sie eine leere Instanz erstellen möchten. HashMap scheint so gut wie jede andere zu sein - verwenden Sie das einfach.
quelle
Entweder
Collections.emptyMap()
oder wenn die Typinferenz in Ihrem Fall nicht funktioniert,Collections.<String, String>emptyMap()
quelle
Da in vielen Fällen eine leere Karte für das nullsichere Design verwendet wird, können Sie die
nullToEmpty
Dienstprogrammmethode verwenden:Ähnliches gilt für Sets:
und Listen:
quelle
Wie wäre es mit :
Map <String, String> s = Collections.emptyMap ();
quelle