[英]what is the point of the overloading of the method sort in class Arrays
我發現由於參數類型的原因,類Arrays
sort()
方法並不相同,但是某些邏輯是相同的。
例如當參數long
,方法與參數為Integer
相同。 那么重載該方法的重點是什么。 換句話說,代碼可能更短,但是為什么設計得那么長呢?
當參數長時,方法與參數整數相同。
它不是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的角度來看,這並不方便。 這個想法是讓用戶使用他們最初使用的類型,而不是強迫他們進行手動(通常是容易出錯的)轉換。 所以重點是方便 。
如果您有整數數組int[]
,則不能將它們傳遞給Arrays#sort(long[])
(反之亦然),因為它們是不同的類型。 因此,您需要所有原始數組類型的方法簽名。 同樣,沒有通用的超類型可以用作參數類型。
反問:如果您不重載#sort
方法,那么建議您為#sort
方法使用哪些參數類型,以便您可以同時傳遞int[]
和long[]
類型進行排序?
//在有關鑄造的注釋中提出您的問題后更新:
不,您不能從int[]
為long[]
,反之亦然。 以下代碼將無法編譯:
int[] myIntArray = {1, 2, 3};
Arrays.sort((long[]) myIntArray); // COMPILE ERROR
您可以執行以下操作(需要Java 8):
int[] myIntArray = {1, 2, 3};
long[] myCastedArray = Arrays.stream(myIntArray).asLongStream().toArray();
Arrays.sort(myCastedArray); // #sort(long[])
順便說一句,盡管您說過安德魯·托比爾科(Andrew Tobilko)的回答對您沒有幫助,但您應該嘗試理解他在說什么。 我還認為您一定要了解int/long
(原始)和int[]/long[]
(原始數組)之間的區別。
由於元素的類型不同,因此您需要相應地實現sort
方法。
關鍵字是多態 ;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.