Java-声明新通用集时出现意外类型错误

Van*_*Van 8 java generics

我以为我知道我用仿制药做了什么,但显然不是.

ArraySetList<char> setA = new ArraySetList<char>();
Run Code Online (Sandbox Code Playgroud)

编译时给出:

error: unexpected type
ArraySetList<char> setA = new ArraySetList<char>();
             ^
required: reference
found:    char
Run Code Online (Sandbox Code Playgroud)

以及所有后续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\
Run Code Online (Sandbox Code Playgroud)

Lit*_*ild 11

Java Generics适用于对象而不适用于原始数据类型.但是,如果您需要存储原始数据类型,则需要使用相应的包装类对象.
这些类只是"包裹"原始数据类型,为它们提供对象外观.

因为char,相应的包装类是Character,因此,您必须编写您的代码行:

ArraySetList<Character> setA = new ArraySetList<Character>();   
Run Code Online (Sandbox Code Playgroud)

请阅读:http://docs.oracle.com/javase/tutorial/java/data/numberclasses.html

但是,添加元素时,您将添加正常char.这是因为如果需要,Java会自动将其转换Characterchar 自动自动返回.这称为自动装箱转换.

自动装箱是Java编译器在基元类型和相应的对象包装类之间进行的自动转换.例如,将int转换为Integer,将double转换为Double,依此类推.如果转换是另一种方式,则称为拆箱.

来源:http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html


Rei*_*eus 7

泛型类型参数需要引用类型(或wilcards).

你不能使用原始类型(更多见限制);

ArraySetList<Character> setA = new ArraySetList<Character>();
Run Code Online (Sandbox Code Playgroud)

阅读JLS 4.5.1 Type Arguments和Wildcards以获取可用类型