0

次のコンパイルエラーが発生します。

The method sort(List<T>, Comparator<? super T>) in the type Collections is not applicable for the arguments (T[], Comparator<capture#1-of ? extends T>) Main.java   /Sorting/src/com/kash/test  line 11
The method sort(List<T>, Comparator<? super T>) in the type Collections is not applicable for the arguments (T[], Comparator<capture#2-of ? super T>)   Main.java   /Sorting/src/com/kash/test  line 15
The method sort(List<T>, Comparator<? super T>) in the type Collections is not applicable for the arguments (T[], Comparator<T>)    Main.java   /Sorting/src/com/kash/test  line 19

(EclipseJunoのJDK1.7.0を使用して)コンパイルすると、次のコードが実行されます。

package com.kash.test;

import java.util.Collections;
import java.util.Comparator;

// 3 attempts to write a wrapper over: Collections' method
//      public static <T> void sort(List<T> list, Comparator<? super T> c)
public class Main {

    public static <T> void sort1(T[] array, Comparator<? extends T> c) {
        Collections.sort(array, c); // line 11
    }

    public static <T> void sort2(T[] array, Comparator<? super T> c) {
        Collections.sort(array, c); // line 15
    }

    public static <T> void sort3(T[] array, Comparator<T> c) {
        Collections.sort(array, c); // line 19
    }

    public static void main(String[] args) {

    }
}

私は以下を読みましたが、あまり理解していませんでした。何か助けはありますか?

- 編集 -

なぜ私がそんな愚かなことをしているのか知りたがっている気難しい人たちのために。なぜ私がこれをしているのか気にしないのなら、残りのことを気にしないでください。

なんで?

私は次のインターフェースのいくつかの実装(例えば、クイック、挿入、ヒープ、混合、イントロ、バブルなど)を書いています:

package com.kash.src;

import java.util.Comparator;
import java.util.List;

/**
 * Interface that provides all sorting functions for all possible representations of a list of Objects (non-primitive
 * types). <br>
 * - {@link List}<{@link Comparable}><br>
 * - Array of < ? extends {@link Comparable}><br>
 * - {@link List}< ? > with external {@link Comparator}<br>
 * - Array of < ? > with external {@link Comparator}<br>
 * 
 * @author Kashyap Bhatt
 * 
 */

public interface Sorter {
    <T extends Comparable<T>> void sort(List<T> list);

    <T extends Comparable<T>> void sort(T[] array);

    <T extends Object> void sort(List<T> list, Comparator<? super T> c);

    <T extends Object> void sort(T[] array, Comparator<? super T> c);
}

すべてのソート実装をテストしてテストできるようにするためです。結果をJavaのsort実装と比較したいので、内部的にJavaのsortメソッドを呼び出すこのインターフェースの実装も作成しています。そこで私は問題に直面しました。

4

3 に答える 3

3

Collections#sortListは、配列を渡すときにしばらく時間がかかることを想定しています。
行う:

public static <T> void sort1(T[] array, Comparator<? extends T> c) {
        Collections.sort(Arrays.asList(array), c); // line 11
}
于 2012-09-19T20:32:57.740 に答える
3

Collections.sort()配列をソートしませんが、Lists。

于 2012-09-19T20:33:11.573 に答える
1

sort(List<T>, Comparator<? super T>)タイプCollectionsのメソッドは、引数(T[], Comparator<capture#1-of ? extends T>)Main.java / Sorting / src / com / kash / testline11には適用できません。

あなたは期待されている場所と期待されているT[]場所を通過しています。List<T>Comparator<? extends T>Comparator<? super T>

なぜそれがエラーを出してはならないと思いますか?

于 2012-09-19T20:35:30.740 に答える