Есть ли словарь, который принимает значения различных типов данных? - PullRequest
6 голосов
/ 13 декабря 2010

Мне нужна карта, где значения имеют разные типы, такие как целое число, строка и т. Д. Проблема с Java в том, что примитивы здесь не Object s, что говорит о том, что может быть невозможно иметь гибридный словарь. Я хочу это подтвердить.

Ответы [ 4 ]

8 голосов
/ 13 декабря 2010

Звучит так, будто вы просто хотите Map<String, Object> (или любой другой тип ключа).

Значения примитивов будут упакованы соответствующим образом:

Map<String, Object> map = new HashMap<String, Object>();

map.put("int", 20);
map.put("long", 100L);
// etc

Обратите внимание, что для получениязначение и unbox it, вы должны указать конкретный тип оболочки:

// 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();
3 голосов
/ 13 декабря 2010

Когда вы помещаете примитивы в Map в Java, они получают Auto-Boxed в своей форме объекта. Например, если у вас есть 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 на карту.

1 голос
/ 13 декабря 2010

Вы можете использовать autoboxing и использовать Integer вместо int и т. Д.

Соответствующие типы (Integer, Double, Bool, ...) наследуют объект, поэтому вымог использовать стандартный Map<Object, Whatever> и бросать в него произвольные вещи.

0 голосов
/ 13 декабря 2010

Вы можете использовать Integer вместо int.

...