有時候會有人認為:null返回值比零長度陣列或者集合的方法,幾乎每次用到該方法時都需要這種曲折的處理方式。這樣做很容易出錯,因為編寫客戶端程式的程式設計師可能會忘記寫這種專門的**來處理null返回值。這樣的錯誤也許幾年都不會被注意到,因為這樣的方法通常返回乙個或者多個物件。返回null而不是零長度的陣列也會使返回陣列或者集合的方法本身變得更加複雜,這一點雖然不是特別重要,但是也值得注意。
有時候會有人認為:null返回值比零長度陣列更好,因為他避免了分配陣列所需要的開銷。這種觀點是站不住腳的,原因有兩點。第一,在這個級別上擔心效能問題是不明智的,除非分析表明這個方法正式造成效能問題的真正源頭。第二,對於不返回任何元素的呼叫,每次都返回同乙個零長度陣列是有可能的,因為零長度陣列是不可變的,而不可變物件有可能被自由的共享。實際上,當你使用標準做法把一些元素從乙個集合轉存到乙個型別化的陣列中時,他正是這麼做的。
在這種習慣用法中,零長度陣列常量被傳遞給toarray方法,以指明所期望的返回型別。正常情況下,toarray方法分配了返回的陣列,但是,如果集合是空的,他將使用零長度的輸入陣列,collection.toarray(t)的規範保證:如果輸入陣列大到足夠容納這個集合,他就將返回這個輸入陣列。因此,這種做法永遠也不會分配零長度的陣列。
簡而言之,返回型別為陣列或集合的方法沒理由返回null,而不是返回乙個零長度的陣列或者集合。這種習慣做法(指返回null)很有可能是從c程式語言中沿襲過來的,在c語言中,陣列長度是與實際的陣列分開返回的。在c語言中,如果返回的陣列長度為零,再分配乙個陣列就沒有任何好處。
返回零長度的陣列或者集合,而不是null
第四十三條 返回零長度的陣列或者集合,而不是null 如果乙個方法的返回值型別是集合或者陣列 如果在方法內部需要返回的集合或者陣列是零長度的,也就是沒有實際物件在裡面,我們也應該放回乙個零長度的陣列或者集合,而不是返回null。如果返回了null,客戶端程式員就要檢測返回的是不是null,然後才能 ...
第43條 返回零長度的陣列或者集合,而不是null
private final listcheesesinstock public cheese getcheese 如果返回null,在客戶端處理 就需要有額外的 來處理null返回值 cheese cheeses shop.getcheeses if cheeses null arrays.asli...
零長度陣列
零長度陣列 神奇的int reserve 0 include include struct device 構題 device 之後 這種宣告方法可以巧妙的實現c語 言裡的陣列擴充套件 int main a.out p dev reserve 0 100 p dev reserve 24 0 size...