2010-07-23 28 views
9

我們是否決定不執行int[]toString方法,而是讓它繼承ObjecttoString方法?使用toString的Java語言設計

+5

如果你需要的功能...你知道'java.util.Arrays.toString' ...嗎? – 2010-07-23 15:15:48

+0

@Konrad,但它是一個糟糕的設計選擇使用工具類,只是一個實用的一個恕我直言。 – 2010-07-23 15:52:03

+0

@彼得:我沒有捍衛它。就我而言,Java是一系列糟糕的設計選擇。 – 2010-07-24 10:53:35

回答

8

他們確實爲陣列實施了更合理的toString方法。他們位於java.util.Arrays班。

至於推理。我假設在Arrays類中提供的覆蓋,試圖爲不同類型的數組實現通用toString要麼複雜要麼不可能。 toString方法將不得不知道它正在處理什麼類型的數組,並且適當地輸出數據。例如,Object[]必須在每個元素上使用toString,而char[]必須輸出該字符,並且數字數據類型必須轉換爲數字字符串。

Arrays中的方法免費得到這個,因爲這些類型是由於覆蓋而固定的。

+1

事實上,將Object改爲對數組有一個合理的toString()非常簡單,只是不推薦。甚至更好的int []有它自己的類,它知道它的類型可以做什麼toString(int [])。 – 2010-07-23 15:49:55

+0

'改變對象有一個明智的toString()爲數組'?您是否打算修補sun源代碼? – 2010-07-23 18:36:19

+0

Sun一直對源代碼進行修復和發佈,Java 6已經升級到了21. – 2010-07-28 06:02:23

2

我猜想是因爲以下原因:他們如何知道用戶如何展示他們的數組?它可能「數組大小:10」或它可能是「[x,y,z]」。

他們給了你一個默認值,如果你想使其他東西很容易做到。

您可以使用Apache的ToStringBuilder使其更容易...

http://commons.apache.org/lang/api/org/apache/commons/lang/builder/ToStringBuilder.html

+2

不僅如此,在一個包含100,000個元素的數組上調用'toString()'可能是災難性的。 'toString()'的目的不僅僅是顯示一個對象的內容,而且還要顯示一個可讀的形式以顯示在工具,調試器等中。 – 2010-07-23 15:59:50

2

我的猜測是,由於Array對象是在Java源代碼的語言設計者不會創建 - 他們被創建Java編譯器。請記住,您可以擁有任何對象類型的數組,因此編譯器會根據您需要的類型適當地創建Array對象。

如果他們要創建一個標準的方法,它應該如何工作並不明顯。例如,執行toString()並連接結果可能適用於小數組,但它不適用於多維數組或具有1,000個條目的數組。所以我認爲沒有創建toString()方法來保持所有數組一致。

不可否認,這是令人討厭的,有時候我認爲沿着"Array[" + size + "] of " + getClassName()的路線會比默認好得多。

+0

我認爲,這個的第一部分會觸及它在頭上。 – 2010-07-23 15:44:23

1

猜測有點這裏,但是...

沒有一個int數組的一個明顯的字符串表示。人們以不同的方式做到這一點:逗號分隔,空格分隔,括在括號或括號中或者什麼都不用。這可能會促使決定不在Java 1.1中實現它,同時它也是低優先級的代碼(因爲任何人都可以實現一種方法,將一個數組作爲一個字符串自己編寫,非常簡單)。

現在,您無法在Java 1.2或更高版本中升級它,因爲這會破壞已使用舊行爲的任何人的兼容性。但是,您可以添加一個實現一些功能的實用程序類,這就是他們對java.util.Arrays所做的。