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

时间:2013-10-23 00:42:14

标签: java generics

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

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

编译时给出:

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

以及所有后续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 个答案:

答案 0 :(得分:11)

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

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

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

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

但是,添加元素时,您将添加普通char。这是因为Java会自动将其转换为Character并自动将其转换为char ,如果需要的话。这称为自动装箱转换。

  

Autoboxing是Java编译器自动转换   原始类型与其对应的对象包装器之间   类。例如,将int转换为Integer,将double转换为a   双,等等。如果转换是另一种方式,那就是   称为拆箱。

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

答案 1 :(得分:7)

泛型类型参数需要引用类型(通配符)。

您不能使用原始类型(有关更多信息,请参阅restrictions);

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

阅读JLS 4.5.1 Type Arguments and Wildcards了解可用类型