Odpowiedzi:
W Javie nie można używać typów pierwotnych jako argumentów ogólnych. Użyj zamiast tego:
Map<String, Integer> myMap = new HashMap<String, Integer>();
W przypadku automatycznego pakowania / rozpakowywania istnieje niewielka różnica w kodzie. Auto-boxing oznacza, że możesz pisać:
myMap.put("foo", 3);
zamiast:
myMap.put("foo", new Integer(3));
Automatyczne boksowanie oznacza, że pierwsza wersja jest niejawnie konwertowana na drugą. Automatyczne rozpakowywanie oznacza, że możesz pisać:
int i = myMap.get("foo");
zamiast:
int i = myMap.get("foo").intValue();
Niejawne wywołanie intValue()oznacza, że jeśli klucz nie zostanie znaleziony, wygeneruje NullPointerException, na przykład:
int i = myMap.get("bar"); // NullPointerException
Powodem jest wymazywanie typów . W przeciwieństwie do, powiedzmy, w C # typy ogólne nie są zachowywane w czasie wykonywania. Są po prostu „cukrem syntaktycznym” dla jawnego rzucania, aby zaoszczędzić ci tego:
Integer i = (Integer)myMap.get("foo");
Aby dać ci przykład, ten kod jest całkowicie legalny:
Map<String, Integer> myMap = new HashMap<String, Integer>();
Map<Integer, String> map2 = (Map<Integer, String>)myMap;
map2.put(3, "foo");
GNU Trove obsługuje to, ale nie używa typów ogólnych. http://trove4j.sourceforge.net/javadocs/gnu/trove/TObjectIntHashMap.html
W programie nie można używać typów pierwotnych HashMap. intlub doublenie działa. Musisz użyć jego typu otaczającego. dla przykładu
Map<String,Integer> m = new HashMap<String,Integer>();
Teraz oba są obiektami, więc to zadziała.
int jest typem prymitywnym, możesz przeczytać, co oznacza typ prymitywny w java tutaj , a Map to interfejs, który ma obiekty jako dane wejściowe:
public interface Map<K extends Object, V extends Object>
obiekt oznacza klasę, a to oznacza również, że możesz stworzyć inną klasę, która się od niej wywodzi, ale nie możesz stworzyć klasy, która wykracza poza int. Nie możesz więc używać zmiennej int jako obiektu. Mam rozwiązania dla twojego problemu:
Map<String, Integer> map = new HashMap<>();
lub
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];
Możesz użyć typu referencyjnego w argumentach ogólnych, a nie typu pierwotnego. Więc tutaj powinieneś użyć
Map<String, Integer> myMap = new HashMap<String, Integer>();
i zapisz wartość jako
myMap.put("abc", 5);