创建参数是数组的泛型类

时间:2012-05-18 20:48:00

标签: java arrays generics comparator

我想创建一个释放Comparator的类。这个比较器将比较两个数组,其中数组可以包含任何可比较的数组。可以让我做这样的事情:

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

参数的类型不一定是Integer []。它们可以是任何东西。

我有什么方法可以使用泛型创建这样的类?或者我的比较器应该接收对象。如果它必须接收对象,我如何检查它是否是一个数组并从中获取元素?

3 个答案:

答案 0 :(得分:3)

如何将数组本身用作Comparator的类型参数?

public class ArrayComparator<T extends Comparable<? super T>> implements
        Comparator<T[]> {
    @Override
    public int compare(T[] o1, T[] o2) {
        // TODO
    }
}

答案 1 :(得分: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}));
    }

}

答案 2 :(得分: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) {