我有一个扩展LinkedList类的类。 这是代码的摘录:
class SortedList<Integer> extends LinkedList<Integer> {
int intMethod(Integer integerObject){
return integerObject;
}
}
预计会返回自动取消装箱的int值。但由于某种原因,编译器抛出一个错误,指出类型不兼容,并且所需类型为int,找到的类型为Integer。这在一个完全不同的班级工作!是什么赋予了? :(
答案 0 :(得分:10)
这是因为<Integer>
之后您有SortedList
。
通常您使用T
作为类型参数:class SortedList<T>
,但您使用的是Integer
。也就是说,您使Integer
成为一个类型参数(隐藏了java.lang.Integer
)。
你的班级,就目前而言,相当于
class SortedList<T> extends LinkedList<T> {
int intMethod(T integerObject){
return integerObject; // <-- "Cannot convert from T to int"
}
}
删除type参数,它可以正常工作:
class SortedList extends LinkedList<Integer> {
int intMethod(Integer integerObject){
return integerObject;
}
}
答案 1 :(得分:2)
问题是您已将Integer
声明为SortedList
类的泛型类型参数。因此,当您将Integer
称为intMethod
方法的参数时,这意味着类型参数,而不是我怀疑您的意思的java.lang.Integer
类型。我想你想要:
class SortedList extends LinkedList<Integer> {
int intMethod(Integer integerObject){
return integerObject;
}
}
这样SortedList
总是一个整数列表,我怀疑这是你想要实现的。如果您 希望将SortedList
设为通用类型,则可能需要:
class SortedList<T> extends LinkedList<T> {
int intMethod(Integer integerObject){
return integerObject;
}
}