Antworten:
Sie können in Java keine primitiven Typen als generische Argumente verwenden. Verwenden Sie stattdessen:
Map<String, Integer> myMap = new HashMap<String, Integer>();
Beim Auto-Boxing / Unboxing gibt es kaum Unterschiede im Code. Auto-Boxing bedeutet, dass Sie schreiben können:
myMap.put("foo", 3);
anstatt:
myMap.put("foo", new Integer(3));
Auto-Boxing bedeutet, dass die erste Version implizit in die zweite konvertiert wird. Auto-Unboxing bedeutet, dass Sie schreiben können:
int i = myMap.get("foo");
anstatt:
int i = myMap.get("foo").intValue();
Der implizite Aufruf von intValue()
bedeutet, dass der Schlüssel, wenn er nicht gefunden wird, Folgendes generiert NullPointerException
:
int i = myMap.get("bar"); // NullPointerException
Der Grund ist das Löschen des Typs . Anders als beispielsweise in C # werden generische Typen zur Laufzeit nicht beibehalten. Sie sind nur "syntaktischer Zucker" für explizites Casting, um Ihnen dies zu ersparen:
Integer i = (Integer)myMap.get("foo");
Um Ihnen ein Beispiel zu geben, dieser Code ist vollkommen legal:
Map<String, Integer> myMap = new HashMap<String, Integer>();
Map<Integer, String> map2 = (Map<Integer, String>)myMap;
map2.put(3, "foo");
GNU Trove unterstützt dies, verwendet jedoch keine Generika. http://trove4j.sourceforge.net/javadocs/gnu/trove/TObjectIntHashMap.html
Sie können in keine primitiven Typen verwenden HashMap
. int
oder double
nicht arbeiten. Sie müssen den umschließenden Typ verwenden. zum Beispiel
Map<String,Integer> m = new HashMap<String,Integer>();
Jetzt sind beide Objekte, also wird dies funktionieren.
int ist ein primitiver Typ, können Sie lesen , was bedeutet das eine primitive Art in Java hier , und eine Karte ist eine Schnittstelle, die auf Objekte als Eingabe hat:
public interface Map<K extends Object, V extends Object>
Objekt bedeutet eine Klasse, und es bedeutet auch, dass Sie eine andere Klasse erstellen können, die von ihr ausgeht, aber Sie können keine Klasse erstellen, die von int ausgeht. Sie können also die Variable int nicht als Objekt verwenden. Ich habe zwei Lösungen für Ihr Problem:
Map<String, Integer> map = new HashMap<>();
oder
Map<String, int[]> map = new HashMap<>();
int x = 1;
//put x in map
int[] x_ = new int[]{x};
map.put("x", x_);
//get the value of x
int y = map.get("x")[0];
Sie können den Referenztyp in generischen Argumenten verwenden, nicht den primitiven Typ. Also hier solltest du verwenden
Map<String, Integer> myMap = new HashMap<String, Integer>();
und Wert speichern als
myMap.put("abc", 5);