2

在浏览 Arrays Class 的 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)

我无法理解,为什么需要这么多重载方法,而最后一个泛型方法似乎就足够了。

甚至在泛型之前,工作方法就Object可以解决问题。

为什么 Arrays 类设计了这么多重载的方法?

4

4 回答 4

7

简单地说,原始数组不扩展Object[],就像原始类型不是Objects 一样。出于这个原因,通用方法采用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类型的第三个参数,它在方法的其他变体中不存在binarySearch

于 2013-04-17T18:15:59.787 回答
1

简而言之,为相同的功能使用相同的方法名称更容易。它们中的大多数被设计用于不同的原始类型,最后一种是用于对象。泛型类型 T[] 不适用于原始类型。

于 2013-04-17T18:16:20.903 回答