3

sortinの次のオーバーロードに出くわしましたjava.util.Arrays:

public static void sort(Object[] a)

public static <T> void sort(T[] a, Comparator<? super T> c)

最初のオーバーロードはジェネリックではなく、2 番目のオーバーロードはジェネリックであるのはなぜですか? Object[]最初のオーバーロードがではなく を取るのはなぜComparable[]ですか? ドキュメントには次のようにも記載されています。

配列内のすべての要素は、Comparableインターフェイスを実装する必要があります。

では、Java の静的型システムでその制約を検証しないことに何の意味があるのでしょうか?

4

2 に答える 2

2

最初の 1 つの方法 ( void sort(Object[] a)) は、次の理由で一般的ではありません。

  1. ジェネリックが登場する前に導入されましたJava
  2. 実際にはジェネリックは必要ありません

2番目のものはジェネリックスを必要としますが、これはこの構造のためだけだと思います。これは、クラスComparator<? super T>の2番目のパラメーターで制限を宣言する便利な方法が他にないためです。Comparator

于 2013-06-05T09:18:58.047 に答える