0

Comparatorを拡張したクラスを作りたい。このコンパレータは 2 つの配列を比較します。配列には比較可能なものをすべて含めることができます。私にこのようなことをさせてくれる何か:

comparator.compare(new Integer[] {1,2}, new Integer[] {3,4,5});

パラメータの型は必ずしも Integer[] ではありません。それらは何でも配列である可能性があります。

ジェネリックを使用してそのようなクラスを作成する方法はありますか? または、代わりにコンパレーターがオブジェクトを受け取る必要があります。オブジェクトを受け取る必要がある場合、それが配列であるかどうかを確認し、その中から要素を取得するにはどうすればよいですか?

4

3 に答える 3

3

配列自体を型パラメータとして使用するのはどうComparatorですか?

public class ArrayComparator<T extends Comparable<? super T>> implements
        Comparator<T[]> {
    @Override
    public int compare(T[] o1, T[] o2) {
        // TODO
    }
}
于 2012-05-18T20:58:15.693 に答える
2

コンパレータのパラメータタイプはT[]である必要があります。

使用例は次のとおりです。

public class Test<T> implements java.util.Comparator<T[]> {

    @Override
    public int compare(T[] paramT1, T[] paramT2) {
        return 0;
    }

    public static void main(String[] args) {
        System.out.println(new Test<Integer>().compare(new Integer[] {1,2}, new Integer[] {3,4,5}));
    }

}
于 2012-05-18T20:55:48.110 に答える
2

はい、たとえば次のようにできます。

implements Comparator<T[]> {
    @Override
    public int compare(T[] array1, T[] array2) {
        //compare arrays here
        return ...;
    }

または、呼び出し値のタイプを推測する次のような比較メソッド:

public static <T> int compare(T[] array1, T[] array2) {
于 2012-05-18T20:57:30.667 に答える