[英]Using generics in Comparable
我正在嘗試使用Comparable<T>
接口在Java中實現泛型。
public static <T> T[] sort(T[] a) {
//need to compare 2 elements of a
}
假設我想在Comparable
接口中覆蓋上述類型T
的compareTo
方法。 即我需要比較我的T
型的兩個元素,我將如何做? 我不知道我的T
型會是什么。
您需要在方法上設置類型約束。
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) }
}
老問題但......
正如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>
,因此如果使用Comparable<T>
而不是Comparable<? super T>
那么你的sort方法不能用在B
的數組上Comparable<? super T>
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>
。
嘗試使用<T extends Comparable<T>>
然后compareTo
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.