我发现类sort()
中的方法Arrays
由于参数类型的原因而不同,但是某些逻辑是相同的。
例如,当参数为long
时,方法与参数为Integer
相同。那么重载该方法的重点是什么。换句话说,代码可能更短,但是为什么设计得那么长?
答案 0 :(得分:3)
当参数为long时,方法与参数为整数相同。
不是int
和long
,而是int[]
和long[]
。这一点很重要。
例如,int
和long
的原始转换范围不断扩大。
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
方法。
关键字是多态性;)