我想创建一个释放Comparator的类。这个比较器将比较两个数组,其中数组可以包含任何可比较的数组。可以让我做这样的事情:
comparator.compare(new Integer[] {1,2}, new Integer[] {3,4,5});
参数的类型不一定是Integer []。它们可以是任何东西。
我有什么方法可以使用泛型创建这样的类?或者我的比较器应该接收对象。如果它必须接收对象,我如何检查它是否是一个数组并从中获取元素?
答案 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) {