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 введите Аргументы и подстановочные знаки для используемых типов