2012-03-04 98 views
5

只是一個簡單的問題,但爲什麼數組中沒有封裝爲length?這僅僅是編程的初學者,因爲我覺得getLength()方法很容易實現。數組中的長度

+0

相關:http://stackoverflow.com/q/9297899/697449 – 2012-03-04 01:43:16

+1

投票重新打開。海事組織,這不是一個鏈接問題的重複。這個問題是爲什麼Java設計者沒有**封裝**長度字段。 (鏈接的問題是關於數組與字符串的API一致性......這是一個非常不同的問題。) – 2012-03-04 01:54:55

+2

此外,它是(IMO)和**有趣的問題,值得回答。 – 2012-03-04 02:03:29

回答

1

我有一個假設,但我不能說這是java的設計者爲什麼那樣做的原因。

數組是一個固定長度的容器(當然還有一個對象)。它是一個非常基本的,所以在這種情況下封裝將是很好,但不是關鍵。以ArrayList爲例,可以將其視爲數組的封裝。

基本數組與封裝它的其他類型相比有許多優點。所以也許當Java的第一個版本出來時,它缺少今天大部分的優化。因此,使用數組的簡單性(在性能方面)具有數據結構是一件好事。

而且這可能是因爲他們沒有想到,在那個時候,後來他們不得不保持向後兼容性:)

無論如何,如果你覺得有趣的東西有關(也許你可以電子郵件一樣簡單的太陽/ oracle)請發帖! 這是一個很好的問題。

0

雖然數組可能被解釋爲對象,但它們實際上只是一組包含其他對象或變量的固定內存地址。通過這種方式,他們有屬性,如.length,但不一定方法,如.getLength()

了很多有關陣列的信息可以在這裏找到: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

+1

'[需要的引證]' – delnan 2012-03-04 01:39:59

+1

這個解釋不成立。事實上,數組有'Object'作爲它們的隱式超類,因此DO有一堆方法。由此可見,Java設計者*可以爲所有數組定義一個「length()」方法。 (應用程序不能添加方法的事實在這裏並不相關。) – 2012-03-04 02:02:04

0

這將是很容易實現,這就是爲什麼它沒有被執行。

數組只是存儲塊,沒有真正的控件。當不需要高級控制時,它們實現了一種簡單快捷的存儲方法。

您可以使用列表,隊列,鏈接列表,雙鏈表等可以記錄其大小的記錄(如果需要)。顯然,取決於你使用的語言,你可能必須自己創建這些語言。

如果你想擁有一個數組的長度並且仍然使用一個簡單的數組,你可以在每次添加東西時加1到count變量,每次刪除東西時減1。這將執行與getLength()方法相同的功能。

+3

什麼?長度*是*存儲的,它不是通過getter方法公開的,而是通過公共成員公開的。 – delnan 2012-03-04 01:42:43