3

LinkedList クラスを拡張するクラスがあります。コードの抜粋を次に示します。

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

これは、自動ボックス化解除された int 値を返すことが期待されています。しかし、何らかの理由で、型に互換性がなく、必要な型が int で、見つかった型が Integer であるというエラーがコンパイラによってスローされます。これは別のクラスで完全にうまく機能します! 何を与える?:(

4

2 に答える 2

10

これは、<Integer>afterがあるためです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"
      }
}

型パラメーターを削除すると、問題なく動作します。

class SortedList extends LinkedList<Integer> {
      int intMethod(Integer integerObject){
          return integerObject;
      }
}
于 2011-02-06T07:35:52.363 に答える
2

問題は、クラスIntegerのジェネリック型パラメーターとして宣言したことです。SortedListしたがってInteger、メソッドのパラメーターとして参照する場合intMethod、それは型パラメーターを意味し、java.lang.Integerあなたが意図したと思われる型ではありません。私はあなたが欲しいと思います:

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

このように、 aSortedListは常に整数のリストです。これは、あなたが達成しようとしていたものだと思います。ジェネリック型を作成したい場合SortedListは、おそらく次のようにします。

class SortedList<T> extends LinkedList<T> {
    int intMethod(Integer integerObject){
        return integerObject;
    }
}
于 2011-02-06T07:36:05.087 に答える