Используя интервал как параметр типа для java.util. Словарь

Когда я пытаюсь объявить Словарь как таковой:

private Dictionary<String, int> map;

Компилятор дает мне следующую ошибку:

Синтаксическая ошибка на маркере "интервал", Размеры, ожидаемые после этого маркера

Но это хорошо работает с Integer. Я неопределенно знаю тот Java обработки int / Integer по-другому (я происхожу из среды.NET), но я надеялся, что кто-то мог дать мне полное объяснение на том, почему я не могу использовать примитивы в Словаре <>

34
задан Code Jockey 31 August 2011 в 20:20
поделиться

5 ответов

В Java примитивы не являются объектами, поэтому их нельзя использовать вместо объектов. Тем не менее, Java автоматически боксирует/не боксирует примитивы (так же известные как autoboxing) в объекты, так что Вы можете делать такие вещи как:

List<Integer> intList = new LinkedList<Integer>();
intList.add(1);
intList.add(new Integer(2));
...
Integer first = intList.get(0);
int second = intList.get(1);

Но на самом деле это просто компилятор, который автоматически преобразует типы для Вас.

40
ответ дан 27 November 2019 в 16:53
поделиться

В .Net "примитивные" типы поддерживаются объектами. В Java существует жесткое разграничение между примитивными типами и Объектами. В Java 5 введен автобоксинг, который в определенных ситуациях может принуждать к сотрудничеству. Однако, поскольку в системе Java generics используется определение типа, то информации для автобокса в данном случае недостаточно.

.
9
ответ дан 27 November 2019 в 16:53
поделиться

Java-коллекции допускают только ссылки, а не примитивы. Вам нужно использовать классы-обёртки (в данном случае java.lang.Integer), чтобы делать то, что вам нужно:

private Dictionary<String, Integer> map;

они могут делать такие вещи, как:

int foo = map.get("hello");

и

map.put("world", 42);

а Java использует автобоксинг/разборку для работы с деталями преобразования для вас.

Здесь даётся небольшое описание.

.
5
ответ дан 27 November 2019 в 16:53
поделиться

Расширить ответ Тофу Бира.

int - примитив

Целочисленное - это Объект.

Дженерика не поддерживает примитивы.

1
ответ дан 27 November 2019 в 16:53
поделиться

Потому что на Java примитивы действительно примитивы. В Java int будет проходить по значению, а Integer - по ссылке. В .NET int или Int32 и т.д. просто разные имена.

.
0
ответ дан 27 November 2019 в 16:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: