Мне нужна карта, где значения имеют разные типы, такие как целое число, строка и т. д. Проблема с Java заключается в том, что примитивы здесь не Object
, что предполагает, что гибридный словарь может быть невозможен. Я хочу подтвердить это.
Есть ли словарь, который принимает значения различных типов данных?
Ответы (4)
Похоже, вам просто нужен Map<String, Object>
(или любой другой тип вашего ключа).
Примитивные значения будут заключены в соответствующие рамки:
Map<String, Object> map = new HashMap<String, Object>();
map.put("int", 20);
map.put("long", 100L);
// etc
Обратите внимание: чтобы получить значение и распаковать его, необходимо указать конкретный тип оболочки:
// Explicit unboxing
int x = (int) (Integer) map.get("int");
// Implicit unboxing
int y = (Integer) map.get("int");
// USing a method from Number instead
int z = ((Integer) map.get("int")).intValue();
Когда вы помещаете примитивы в Map
в Java, они автоматически упаковываются в свою объектную форму. Например, если у вас есть Map
, определенный как:
Map<Integer, String> myMap = new HashMap<Integer, String>();
тогда вы можете использовать примитивы типа int
, так как они будут автоматически упакованы в Integer
.
Что касается вашего исходного вопроса, определяющего Map
как таковой:
// using Integer for key type, can be something else
Map<Integer, Object> myMap = new HashMap<Integer, Object>();
тогда вы сможете поместить любой объект Java на карту.
new Map<Integer, Object>();
не соответствует действительности.
- person Buhake Sindi; 13.12.2010
Вы можете использовать автоупаковку и использовать Integer
вместо int и так далее.
Соответствующие типы (Integer
, Double
, Bool
, ...) наследуют объект, поэтому вы можете использовать стандартный Map<Object, Whatever>
и добавлять в него произвольные вещи.
Вы можете использовать Integer
вместо int
.