【问题标题】:Why does Arrays.sort take Object[] rather than Comparable[]?为什么 Arrays.sort 采用 Object[] 而不是 Comparable[]?
【发布时间】:2011-01-15 20:09:04
【问题描述】:

我想知道为什么 Arrays 类的 sort 方法要求一个 Object[] 类型的参数。为什么参数不是 Comparable[] 类型。如果您不传递 Comparable[],则会生成 ClassCastException。

为什么 ... public static void sort(Object[] a) 而不是 public static void sort(Comparable[] a) ? 谢谢

【问题讨论】:

  • 您在 Java api 的其他地方也有同样的情况,例如ObjectOutputStream 需要一个实现 Serializable 的对象。我猜,开发人员试图阻止我们进行不必要的强制转换。
  • 在过去,有很多人在实施 JDK,而不仅仅是 Sun。该类的实现可能需要 Comparable,但允许任何确定性、稳定的排序。 (假设)

标签: java interface casting comparable


【解决方案1】:

因为第二种形式需要重新分配数组。即使您知道您的数组仅包含可比较对象,如果原始类型是 Object[],您也不能将其转换为 Comparable[],因为数组类型不匹配。

你可以这样做:

Object[] arr = new String[0];
String[] sarr = (String[]) arr;

但你不能这样做:

Object[] arr = new Object[0];
String[] sarr = (String[]) arr;

所以这是过早的优化:)

【讨论】:

    【解决方案2】:

    否则你无法将Object[]传入。

    【讨论】:

    • @BalusC 有没有这样的情况,你会传递一个你不知道都实现Comparable的对象数组?任何使用 sort 方法的对象都是Comparable。似乎接受Object[]的唯一原因是Object被使用得更频繁,更熟悉,就像蔡司说的那样,否则我们不得不投。
    • Java API 中还有很多类似toArray() 的方法返回Object[]
    • 他们可能正在实现Comparator<T>,这与Comparable<T>相似,但不一样
    猜你喜欢
    • 2023-02-15
    • 2019-10-11
    • 1970-01-01
    • 2011-01-12
    • 2015-11-26
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多