2

Arrays クラスの JavaDocs を読みながら。オーバーロードされたメソッドがたくさんあることに気づきました。例えば、

static int binarySearch(byte[] a, byte key)
static int binarySearch(char[] a, char key)
static <T> int binarySearch(T[] a, T key, Comparator<? super T> c)

最後の汎用メソッドで十分なように見えるのに、なぜこれほど多くのオーバーロードされたメソッドが必要なのか理解できません。

Generics の前でさえ、メソッドObjectが問題を解決できた可能性があります。

なぜ Arrays クラスは多くのオーバーロードされたメソッドで設計されているのですか?

4

4 に答える 4

7

Object[]簡単に言えば、プリミティブ型が s でないのと同様に、プリミティブ配列は extends しませんObject。このため、 のT[]ようなプリミティブ配列に対してジェネリック メソッドを使用することはできませんint[]

于 2013-04-17T18:19:08.213 に答える
2

java.util.Arraysは Java 1.2 以降、ジェネリックが導入されるずっと前から存在していたためです。それらのオーバーロードされたメソッドが含まれていました。次に、などbyte[]にキャストできません。Object[]

于 2013-04-17T18:19:12.793 に答える
1

よく見てください:

static <T> int binarySearch(T[] a, T key, Comparator<? super T> c)

Comparatorメソッドの他のバリアントには存在しないタイプの 3 番目の引数もありbinarySearchます。

于 2013-04-17T18:15:59.787 に答える
1

つまり、同じ機能に対して同じメソッド名を使用する方が簡単です。それらのほとんどは、さまざまなプリミティブ型で機能するように設計されており、最後の 1 つはオブジェクト用です。ジェネリック型 T[] はプリミティブ型では機能しません。

于 2013-04-17T18:16:20.903 に答える