【问题标题】:Why 'Arrays class' has overloaded methods为什么“数组类”有重载方法
【发布时间】:2013-04-17 18:12:24
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您通常不能将数组相互转换,例如long[] 不能转换为 int[]

标签: java arrays generics


【解决方案1】:

简单地说,原始数组不扩展Object[],就像原始类型不是Objects。因此,采用 T[] 的泛型方法不适用于像 int[] 这样的原始数组。

【讨论】:

  • 换句话说,您不能将int[] 视为T[]
【解决方案2】:

因为java.util.Arrays 自 Java 1.2 以来就存在,远在泛型引入之前。它有那些重载的方法。其次,byte[] 不能转换为 Object[] 等。

【讨论】:

    【解决方案3】:

    仔细看:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-31
        • 1970-01-01
        • 1970-01-01
        • 2011-02-14
        • 1970-01-01
        • 1970-01-01
        • 2015-11-02
        相关资源
        最近更新 更多