45

當沒有行時,query.list()和criteria.list()都返回空列表而不是空值。 背後的原因是什麼?hibernate query.list()方法返回空列表而不是空值

+0

你爲什麼要null?我明白,當你查詢單個結果 - 沒有發現將有意義返回null。但是list()應該總是返回一個空列表!空列表的含義是什麼? – ACV 2017-09-14 11:50:55

回答

86

原因是不強制在客戶端代碼中進行空值檢查,與Effective Java 2nd Edition項一致:項目43:返回空數組或集合,而不是空值

這使得客戶端代碼更簡單,並且更少出錯(最有可能的方法實現也是這樣)。

空回成語很可能從C編程語言中的保持,在 其中陣列長度被從實際陣列單獨返回。在C中,如果返回零作爲長度,則不存在分配數組的優點。

+0

嗯......但即使它阻止空檢查,我們仍然需要檢查列表的大小......對吧? 也是一種很好的做法,我們也總是檢查null(至少在我們的團隊中)。 – Reddy 2010-08-30 10:20:01

+12

這就是要點 - 如果你確定(基於API的承諾),值不能爲空,那麼你不檢查null。不,你不需要檢查尺寸。當你迭代集合時,它會跳過迭代。 – Bozho 2010-08-30 11:20:54

+0

好吧......知道了。如果它是空的,並且如果我沒有檢查它,那麼NPE會讓我的應用程序崩潰。但如果它是一個空集合,它會跳過邏輯並繼續(因爲我們通常會檢查大小)。感謝Peter和Bozho。 – Reddy 2010-08-30 12:16:09

10

它是一致的:一個列表返回所有結果,不管有沒有。