Risposte:
Non è possibile utilizzare tipi primitivi come argomenti generici in Java. Usa invece:
Map<String, Integer> myMap = new HashMap<String, Integer>();
Con l' auto-box / unboxing c'è poca differenza nel codice. La boxe automatica significa che puoi scrivere:
myMap.put("foo", 3);
invece di:
myMap.put("foo", new Integer(3));
Auto-boxing significa che la prima versione viene convertita implicitamente nella seconda. Unboxing automatico significa che puoi scrivere:
int i = myMap.get("foo");
invece di:
int i = myMap.get("foo").intValue();
La chiamata implicita a intValue()
significa che se la chiave non viene trovata genererà un NullPointerException
, ad esempio:
int i = myMap.get("bar"); // NullPointerException
Il motivo è la cancellazione del tipo . Diversamente, diciamo, in C # i tipi generici non vengono mantenuti in fase di esecuzione. Sono solo "zuccheri sintattici" per il cast esplicito che ti salva facendo questo:
Integer i = (Integer)myMap.get("foo");
Per fare un esempio, questo codice è perfettamente legale:
Map<String, Integer> myMap = new HashMap<String, Integer>();
Map<Integer, String> map2 = (Map<Integer, String>)myMap;
map2.put(3, "foo");
GNU Trove lo supporta ma non usa generici. http://trove4j.sourceforge.net/javadocs/gnu/trove/TObjectIntHashMap.html
Non puoi usare tipi primitivi in HashMap
. int
o double
non funziona. Devi usare il suo tipo di allegato. per un esempio
Map<String,Integer> m = new HashMap<String,Integer>();
Ora entrambi sono oggetti, quindi funzionerà.
int è un tipo primitivo, puoi leggere cosa significa un tipo primitivo in java qui , e una mappa è un'interfaccia che deve inserire gli oggetti come input:
public interface Map<K extends Object, V extends Object>
oggetto significa una classe e significa anche che è possibile creare un'altra classe che ne deriva, ma non è possibile creare una classe che esca da int. Quindi non puoi usare la variabile int come oggetto. Ho soluzioni di rimorchio per il tuo problema:
Map<String, Integer> map = new HashMap<>();
o
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];
È possibile utilizzare il tipo di riferimento negli argomenti generici, non il tipo primitivo. Quindi qui dovresti usare
Map<String, Integer> myMap = new HashMap<String, Integer>();
e memorizzare il valore come
myMap.put("abc", 5);