我正在尝试使用Comparable<T>
接口在Java中实现泛型。
public static <T> T[] sort(T[] a) {
//need to compare 2 elements of a
}
假设我想在compareTo
界面中覆盖上述类型T
的{{1}}方法。即我需要比较我的Comparable
类型的两个元素,我该怎么做?我不知道我的T
类型是什么。
答案 0 :(得分:9)
您需要在方法上设置类型约束。
public static <T extends Comparable<? super T>> T[] sort (T[] a)
{
//need to compare 2 elements of a
}
这会强制T
类型具有compareTo(T other)
方法。这意味着您可以在方法中执行以下操作:
if (a[i].compareTo(a[j]) > 0) }
}
答案 1 :(得分:0)
尝试使用<T extends Comparable<T>>
,然后compareTo
答案 2 :(得分:0)
老问题但是......
正如jjnguy回应,你需要使用:
public static <T extends Comparable<? super T>> T[] sort(T[] a) {
...
}
请考虑以下事项:
public class A implements Comparable<A> {}
public class B extends A {}
类B
隐式实现Comparable<A>
,而不是Comparable<B>
,因此如果使用B
,则排序方法无法用于Comparable<T>
数组{{1}而不是Comparable<? super T>
。更明确一点:
public static <T extends Comparable<T>> T[] brokenSort(T[] a) {
...
}
在以下情况下可以正常工作:
A[] data = new A[3];
...
data = brokenSort(A);
因为在这种情况下,类型参数T
将绑定到A
。以下将产生编译器错误:
B[] data = new B[3];
...
data = brokenSort(B);
因为T
无法绑定B
,因为B
未实现Comparable<B>
。