簡體   English   中英

在Comparable中使用泛型

[英]Using generics in Comparable

我正在嘗試使用Comparable<T>接口在Java中實現泛型。

public static <T> T[] sort(T[] a) {
    //need to compare 2 elements of a
}

假設我想在Comparable接口中覆蓋上述類型TcompareTo方法。 即我需要比較我的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM