11

我以为我知道我在用泛型做什么,但显然不知道。

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\
4

2 回答 2

17

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

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

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

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

但是,当您添加元素时,您将添加 normal char。那是因为如果需要,Java 会自动将其转换Character为您并自动返回char 这称为自动装箱转换。

自动装箱是 Java 编译器在原始类型与其对应的对象包装类之间进行的自动转换。例如,将 int 转换为 Integer,将 double 转换为 Double,等等。如果转换以另一种方式进行,则称为拆箱。

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

于 2013-10-23T00:54:02.767 回答
7

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

您不能使用原始类型(更多信息请参见限制);

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

阅读JLS 4.5.1 类型参数和通配符以获取可用类型

于 2013-10-23T00:43:54.563 回答