为什么'Arrays类'有重载方法

时间:2013-04-17 18:12:25

标签: java arrays generics

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

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

即使在Generics之前,处理Object的方法也可以解决问题。

为什么Arrays类设计有如此多的重载方法?

4 个答案:

答案 0 :(得分:7)

简单地说,原始数组不会扩展Object[],就像原始类型不是Object一样。因此,使用T[]的通用方法不适用于int[]等基本数组。

答案 1 :(得分:2)

因为自Java 1.2以来存在java.util.Arrays,所以在引入泛型之前很久。它有重载方法。其次,byte[]无法转换为Object[]等。

答案 2 :(得分:1)

仔细观察:

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

还有 Comparator 类型的第三个参数,这在binarySearch方法的其他变体中不存在。

答案 3 :(得分:1)

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