Ответы:
Вы не можете использовать примитивные типы в качестве универсальных аргументов в 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>
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);