Java-получение непредвиденной ошибки типа при объявлении нового универсального набора

Я думал, что знаю, что делаю с дженериками, но, по-видимому, нет.

ArraySetList<char> setA = new ArraySetList<char>();

при компиляции выдает:

error: unexpected type
ArraySetList<char> setA = new ArraySetList<char>();
             ^
required: reference
found:    char

а также та же ошибка для всех последующих символов. Мне интересно, как объявить новый ArraySetList символов.

вот все мои файлы.

http://pastebin.com/4h37Xvu4     // ArraySetList (extends ArrayUnsortedList)
http://pastebin.com/FxmynzkC     // Driver
http://pastebin.com/CgVA0zjY     //ArrayUnsortedList (implements ListInterface)
http://pastebin.com/3iXrCsCc     //ListInterface

2 ответов


Java Generics работает для объектов, а не для примитивных типов данных. Однако если вам необходимо сохранить примитивные типы данных, вам нужно будет использовать соответствующие объекты класса-оболочки.
Эти классы просто "обертывают" примитивный тип данных, чтобы придать им внешний вид объекта.

на char, соответствующий класс оболочки -Character и, следовательно, вы должны написать свой код таким образом:

ArraySetList<Character> setA = new ArraySetList<Character>();   

пожалуйста, прочитайте: http://docs.oracle.com/javase/tutorial/java/data/numberclasses.html

однако при добавлении элементов вы добавите normal char. Это потому, что Java автоматически преобразует его в Character для вас и обратно в char автоматически, если надо будет. Это называется преобразованием auto-boxing.

Autoboxing-Это автоматическое преобразование, которое делает компилятор Java между примитивными типами и соответствующими им обертка объекта занятия. Например, преобразование int в целое число, double в a Двойной и так далее. Если преобразование идет в другую сторону, это называется распаковка.

источник:http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html


аргументы универсального типа требуют ссылочных типов (или wilcards).

вы не можете использовать примитивные типы (Подробнее см. ограничения);

ArraySetList<Character> setA = new ArraySetList<Character>();

читать JLS 4.5.1 введите Аргументы и подстановочные знаки для используемых типов