0

汎用コンテナーを作成しようとしていて、配列を使用する必要があります。次のエラーが表示されます。

Exception in thread "main" java.lang.ClassCastException: 
[Ljava.lang.Object; cannot be cast to [Ljava.lang.Comparable;

ここに私のコードの一部があります:

class MinFo<T extends Comparable> {

private final T[] array;

MinFo(int size){
array = (T[]) new Object[size];

}

T get(){

if(this instanceof Comparable){

int tmpPos = getNotNull();
T tmp = array[tmpPos];
int pos;    
for(pos = tmpPos ; pos < array.length; getNotNull()){

    if(tmp.compareTo(array[pos]) > 0)
    tmp = array[pos];
}

これにより、クラス宣言から「extends Comparable」を削除することになりました。今、私は別のエラーがあります:

error: cannot find symbol
    if(tmp.compareTo(array[pos]) > 0)
          ^
symbol:   method compareTo(T)
location: variable tmp of type T
where T is a type-variable:
 T extends Object declared in class MinFo

私には勝てないように思えます。よろしくお願いします。

4

2 に答える 2

5

はい、これが問題です。

array = (T[]) new Object[size];

それを次のように変更すると:

array = (T[]) new Comparable[size];

それなら大丈夫なはずです。問題は、 to のキャストT[]は (実行時に) isComparable[]の上限としてのto のキャストのみTですComparable

于 2013-07-07T18:11:32.263 に答える
0

オブジェクトは実際には Comparable を実装していないため、その宣言は機能しません。

関連する可能性のある1つの答え。そしてもう一つ; 彼らは私よりもうまく説明していると思います。

于 2013-07-07T19:09:22.153 に答える