类Array中方法排序重载的意义是什么?

时间:2019-04-25 13:51:44

标签: java arrays sorting java-8

我发现类sort()中的方法Arrays由于参数类型的原因而不同,但是某些逻辑是相同的。

例如,当参数为long时,方法与参数为Integer相同。那么重载该方法的重点是什么。换句话说,代码可能更短,但是为什么设计得那么长?

3 个答案:

答案 0 :(得分:3)

  

当参数为long时,方法与参数为整数相同。

不是intlong,而是int[]long[]。这一点很重要。

例如,intlong的原始转换范围不断扩大。

int i = 10;
long l = i;

但是,int[]long[]是完全不同的类型,并且不支持类似的便捷转换。为了将int[]传递到method(long[]),必须手动将int[]转换为long[]

int[] iA = {10, 10};
long[] lA = Arrays.stream(iA).asLongStream().toArray();

从好的API的角度来看,这并不方便。这个想法是让用户使用他们最初使用的类型,而不是强迫他们进行手动(通常是容易出错的)转换。所以重点是便利

答案 1 :(得分:1)

如果您有整数数组int[],则不能将它们传递给Arrays#sort(long[])(反之亦然),因为它们是不同的类型。因此,您需要所有原始数组类型的方法签名。另外,没有通用的超类型可以用作参数类型。

反问:如果您不重载#sort方法,那么建议您为#sort方法使用哪种参数类型,以便您可以同时传递int[]和{{1 }}要排序的类型?


//在有关铸造的注释中的问题后更新:

否,您不能从long[]投射到int[],反之亦然。以下代码将进行编译:

long[]

您可以执行以下操作(需要Java 8):

int[] myIntArray = {1, 2, 3};

Arrays.sort((long[]) myIntArray); // COMPILE ERROR

顺便说一句,尽管您说过安德鲁·托比尔科(Andrew Tobilko)的回答对您没有帮助,但您应该尝试理解他在告诉您什么。我还认为您一定要了解int[] myIntArray = {1, 2, 3}; long[] myCastedArray = Arrays.stream(myIntArray).asLongStream().toArray(); Arrays.sort(myCastedArray); // #sort(long[]) (原始)和int/long(原始数组)之间的区别。

答案 2 :(得分:-1)

由于元素的类型不同,因此需要相应地实现sort方法。

关键字是多态性;)