拆箱问题

时间:2011-02-06 07:30:15

标签: java autoboxing unboxing

我有一个扩展LinkedList类的类。 这是代码的摘录:

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

预计会返回自动取消装箱的int值。但由于某种原因,编译器抛出一个错误,指出类型不兼容,并且所需类型为int,找到的类型为Integer。这在一个完全不同的班级工作!是什么赋予了? :(

2 个答案:

答案 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;
    }
}