Відповіді:
Ви не можете використовувати примітивні типи як загальні аргументи на Java. Використовуйте замість цього:
Map<String, Integer> myMap = new HashMap<String, Integer>();
Що стосується автоматичного боксу / розпакування, то в коді невелика різниця. Автобокс означає, що ви можете писати:
myMap.put("foo", 3);
замість:
myMap.put("foo", new Integer(3));
Автобокс означає, що перша версія неявно перетворена на другу. Авторозпакування означає, що ви можете писати:
int i = myMap.get("foo");
замість:
int i = myMap.get("foo").intValue();
Неявний виклик intValue()
означає, що якщо ключ не знайдений, він генерує NullPointerException
, наприклад:
int i = myMap.get("bar"); // NullPointerException
Причиною є стирання типу . На відміну від, скажімо, у C # загальних типів не зберігаються під час виконання. Вони просто "синтаксичний цукор" для явного лиття, щоб врятувати вас:
Integer i = (Integer)myMap.get("foo");
Для прикладу цей код є абсолютно законним:
Map<String, Integer> myMap = new HashMap<String, Integer>();
Map<Integer, String> map2 = (Map<Integer, String>)myMap;
map2.put(3, "foo");
GNU Trove підтримує це, але не використовує дженерики. http://trove4j.sourceforge.net/javadocs/gnu/trove/TObjectIntHashMap.html
Ви не можете використовувати примітивні типи в HashMap
. int
або double
не працюють. Ви повинні використовувати його додаючий тип. для прикладу
Map<String,Integer> m = new HashMap<String,Integer>();
Зараз обидва є об’єктами, так що це спрацює.
ІНТ примітивний тип, ви можете прочитати , що це означає примітивний тип в Java тут , і карта є інтерфейсом , який має на об'єкти в якості вхідних даних:
public interface Map<K extends Object, V extends Object>
об'єкт означає клас, а це означає також, що ви можете створити інший клас, який закінчується з нього, але ви не можете створити клас, який закінчується з int. Тому ви не можете використовувати змінну int як об’єкт. У мене є рішення щодо вашої проблеми:
Map<String, Integer> map = new HashMap<>();
або
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];
Ви можете використовувати тип посилань у загальних аргументах, а не примітивного типу. Тож тут вам слід скористатися
Map<String, Integer> myMap = new HashMap<String, Integer>();
і зберігати вартість як
myMap.put("abc", 5);