2016-08-16 11 views
1

私はいくつかのライブラリにこのコードを見つけました:変換できないタイプ。 'Comparator <T>'を 'Comparator <?'にキャストできません。スーパーオブジェクト>」

public static <T> List<T> sort(
     Collection<T> collection, 
     Comparator<T> comparator) 
    { 
     Object[] a = collection.toArray(new Object[collection.size()]); 
     //noinspection unchecked 
     Arrays.sort(a, (Comparator<? super Object>) comparator); 
     return cast(Arrays.asList(a)); 
    } 

マイチェッカーが

Inconvertible種類を誓います。このコードが動作する可能性がある状況下ではjava.util.Comparator<T>

java.util.Comparator<? super java.lang.Object> " へ

をキャストすることはできませんか?

+0

これは悪いコードです。彼らはリストを使って作業し、配列を使い、このような消しゴムに頼るのではなく、 'Collections.sort'を使いました。 – user2357112

+0

これはjavacとeclipseで警告とともにコンパイルします。どのような「チェッカー」を使用していますか? – shmosel

+0

私の悪い;私は今、これが他の誰かのひどい図書館のコードであることを認識しています。 'Comparator'と' Collection'の互換性を保証するので、あらゆる状況下で動作します。これはちょっと厄介な実装です。ジェネリックよりも前に移植されている可能性があります。 –

答えて

1

質問に答えるには、コードは機能しません。

私は次のように変更することをお勧め:

public static <T> List<T> sort(Collection<T> collection, Comparator<T> comparator) { 
    List<T> a = new ArrayList<T>(collection); 
    a.sort(comparator); 
    return a; 
} 

一挙にコンパイルエラー awfulnessを修正します。

免責事項:コードがコンパイルや仕事、それは私の携帯電話上で使い込まれたように(それが動作する合理的な可能性があります)ではないことは

+1

@boris old habits die hard:/ – Bohemian

+0

コードはOPではなく、彼はそれを修正しようとしていません。 – shmosel

+2

これはOPのコードとはかなり異なっています。 OPのコードはソートされたコピーを返します。このコードは、コレクションがリストの場合は、その場所にリストをソートします。 –

関連する問題