2011-02-06 16 views
3

私はLinkedListクラスを拡張するクラスを持っています。これは、自動箱なしint型の値を返すことが期待されUnboxing issues

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

: は、ここでは、コードの抜粋です。しかし何らかの理由で、コンパイラは、型が互換性がなく、必要な型がintであり、見つかった型がInteger型であるというエラーをスローします。これは完璧に別のクラスで動作します!何がありますか? class SortedList<T>、しかし、あなたはIntegerではなく、つまり、あなたがIntegerjava.lang.Integerをシャドウ)typeパラメータ作ら使用:。:(

答えて

10

あなたはSortedList<Integer>を持っているので、これは通常、あなたがTは、型パラメータに使用

です。 。

あなたのクラスは、そのままで、

class SortedList<T> extends LinkedList<T> { 
     int intMethod(T integerObject){ 
      return integerObject;   // <-- "Cannot convert from T to int" 
     } 
} 

と同等である型パラメータを削除し、それワットうまくorks:

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

問題は、あなたがSortedListクラスのジェネリック型パラメータとしてInteger宣言したということです。だからIntegerintMethodメソッドのパラメータとして参照すると、タイプパラメータであり、意味すると思われる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