簡體   English   中英

類Array中方法排序重載的意義是什么?

[英]what is the point of the overloading of the method sort in class Arrays

我發現由於參數類型的原因,類Arrays sort()方法並不相同,但是某些邏輯是相同的。

例如當參數long ,方法與參數為Integer相同。 那么重載該方法的重點是什么。 換句話說,代碼可能更短,但是為什么設計得那么長呢?

當參數長時,方法與參數整數相同。

它不是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的角度來看,這並不方便。 這個想法是讓用戶使用他們最初使用的類型,而不是強迫他們進行手動(通常是容易出錯的)轉換。 所以重點是方便

如果您有整數數組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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM