0

我想创建一个扩展 Comparator 的类。此比较器将比较两个数组,其中数组可以包含任何可比较的内容。可以让我做这样的事情的东西:

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

您的 Comparator 参数类型应为 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 回答