在浏览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类设计有如此多的重载方法?
答案 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 []不适用于基本类型。