2011-02-06 98 views
3

我有一个扩展LinkedList类的类。 下面的代码的摘录:拆箱问题

class SortedList<Integer> extends LinkedList<Integer> { 
     int intMethod(Integer integerObject){ 
      return integerObject; 
     } 
} 

预计这将返回自动装箱的int值。但由于某种原因,编译器会抛出一个错误,指出类型不兼容,并且所需的类型为int,发现的类型为Integer。这适用于不同的课程,非常好!是什么赋予了? :(

回答

10

这是因为你SortedList后有<Integer>

通常你用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" 
     } 
} 

删除类型参数,它瓦特兽人就好:

class SortedList extends LinkedList<Integer> { 
     int intMethod(Integer integerObject){ 
      return integerObject; 
     } 
} 
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; 
    } 
} 
+0

谢谢你,工作非常出色。我知道我应该先阅读泛型,然后再解决这个问题。为我服务的权利。 :) – user183037 2011-02-06 07:41:53