【问题标题】:Unboxing issues拆箱问题
【发布时间】:2011-02-06 07:30:14
【问题描述】:

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

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

这应该会返回自动拆箱的 int 值。但是由于某种原因,编译器会抛出一个错误,指出类型不兼容,并且所需的类型是 int,而找到的类型是 Integer。这在不同的班级中非常有效!是什么赋予了? :(

【问题讨论】:

    标签: java autoboxing unboxing


    【解决方案1】:

    这是因为您在SortedList 之后有&lt;Integer&gt;

    通常您使用T 来表示类型参数:class SortedList&lt;T&gt;,但您使用了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;
          }
      }
      

      【讨论】:

      • 谢谢,效果很好。我知道在搞砸之前我应该​​阅读泛型。为我服务。 :)
      猜你喜欢
      • 2018-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      • 2010-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多