Автоматическая упаковка означает, что первая версия неявно преобразуется во вторую. Автоматическая распаковка означает, что вы можете написать:
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> в Map <Integer, String>
T3rm1
учитывая каждый отдельный код в новой строке, код в строке 5 должен быть сначала преобразован в Integer перед использованием метода intValue (), поскольку он рассматривается как объект, когда вы используете метод get ().
ИНТ примитивный тип, вы можете прочитать , что это значит примитивный тип в Java здесь , и карта является интерфейсом , который имеет на объекты в качестве входных данных:
publicinterfaceMap<K extendsObject, V extendsObject>
object означает класс, и это также означает, что вы можете создать другой класс, который будет отличаться от него, но вы не можете создать класс, который будет отличаться от int. Таким образом, вы не можете использовать переменную int в качестве объекта. У меня есть решения для вашей проблемы:
Map<String,Integer> map =newHashMap<>();
или
Map<String,int[]> map =newHashMap<>();int x =1;//put x in mapint[] x_ =newint[]{x};
map.put("x", x_);//get the value of xint y = map.get("x")[0];
Ответы:
Вы не можете использовать примитивные типы в качестве универсальных аргументов в Java. Вместо этого используйте:
При автоматической упаковке / распаковке разница в коде небольшая. Автобокс означает, что вы можете написать:
вместо того:
Автоматическая упаковка означает, что первая версия неявно преобразуется во вторую. Автоматическая распаковка означает, что вы можете написать:
вместо того:
Неявный вызов
intValue()
означает, что если ключ не найден, он сгенерируетNullPointerException
, например:Причина - стирание шрифта . В отличие, скажем, от C # общие типы не сохраняются во время выполнения. Они просто «синтаксический сахар» для явного приведения, чтобы избавить вас от этого:
Чтобы привести вам пример, этот код совершенно законен:
источник
GNU Trove поддерживает это, но не использует дженерики. http://trove4j.sourceforge.net/javadocs/gnu/trove/TObjectIntHashMap.html
источник
Вы не можете использовать примитивные типы в
HashMap
.int
, илиdouble
не работают. Вы должны использовать его охватывающий тип. для примераТеперь оба объекта, так что это сработает.
источник
ИНТ примитивный тип, вы можете прочитать , что это значит примитивный тип в Java здесь , и карта является интерфейсом , который имеет на объекты в качестве входных данных:
object означает класс, и это также означает, что вы можете создать другой класс, который будет отличаться от него, но вы не можете создать класс, который будет отличаться от int. Таким образом, вы не можете использовать переменную int в качестве объекта. У меня есть решения для вашей проблемы:
или
источник
Вы можете использовать ссылочный тип в общих аргументах, а не примитивный тип. Итак, здесь вы должны использовать
и сохранить значение как
источник