在筆者幾年的開發(fā)經(jīng)驗中,經(jīng)??吹巾椖恐写嬖诘教幙罩蹬袛嗟那闆r,這些判斷,會讓人覺得摸不著頭緒,它的出現(xiàn)很有可能和當前的業(yè)務(wù)邏輯并沒有關(guān)系。但它會讓你很頭疼。
建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡(luò)程序員、網(wǎng)頁設(shè)計師等,應(yīng)用各種網(wǎng)絡(luò)程序開發(fā)技術(shù)和網(wǎng)頁設(shè)計技術(shù)配合操作的協(xié)同工作。成都創(chuàng)新互聯(lián)專業(yè)提供網(wǎng)站設(shè)計、做網(wǎng)站,網(wǎng)頁設(shè)計,網(wǎng)站制作(企業(yè)站、自適應(yīng)網(wǎng)站建設(shè)、電商門戶網(wǎng)站)等服務(wù),從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶體驗的提升,我們力求做到極致!有時候,更可怕的是系統(tǒng)因為這些空值的情況,會拋出空指針異常,導(dǎo)致業(yè)務(wù)系統(tǒng)發(fā)生問題。
此篇文章,我總結(jié)了幾種關(guān)于空值的處理手法,希望對讀者有幫助。
在這里小編建了一個前端學習交流扣扣群:132667127,我自己整理的最新的前端資料和高級開發(fā)教程,如果有想需要的,可以加群一起學習交流
業(yè)務(wù)中的空值
場景
存在一個UserSearchService用來提供用戶查詢的功能:
public interface UserSearchService{ ListlistUser(); User get(Integer id); }
問題現(xiàn)場
對于面向?qū)ο笳Z言來講,抽象層級特別的重要。尤其是對接口的抽象,它在設(shè)計和開發(fā)中占很大的比重,我們在開發(fā)時希望盡量面向接口編程。
對于以上描述的接口方法來看,大概可以推斷出可能它包含了以下兩個含義:
在所有的開發(fā)中,XP推崇的TDD模式可以很好的引導(dǎo)我們對接口的定義,所以我們將TDD作為開發(fā)代碼的”推動者”。
對于以上的接口,當我們使用TDD進行測試用例先行時,發(fā)現(xiàn)了潛在的問題:
深入listUser研究
我們先來討論
listUser()
這個接口,我經(jīng)常看到如下實現(xiàn):
public ListlistUser(){ List userList = userListRepostity.selectByExample(new UserExample()); if(CollectionUtils.isEmpty(userList)){//spring util工具類 return null; } return userList; }
這段代碼返回是null,從我多年的開發(fā)經(jīng)驗來講,對于集合這樣返回值,最好不要返回null,因為如果返回了null,會給調(diào)用者帶來很多麻煩。你將會把這種調(diào)用風險交給調(diào)用者來控制。
如果調(diào)用者是一個謹慎的人,他會進行是否為null的條件判斷。如果他并非謹慎,或者他是一個面向接口編程的狂熱分子(當然,面向接口編程是正確的方向),他會按照自己的理解去調(diào)用接口,而不進行是否為null的條件判斷,如果這樣的話,是非常危險的,它很有可能出現(xiàn)空指針異常!