java中基本類型和包裝類型實踐經驗


     至今,小菜用java快兩年了,有些事,也該有個總結。

     基本類型和包裝類型的概念在本文不作贅述。

     如果這兩種類型直接使用,倒沒什么值得討論的,無非就是自動裝箱拆箱,java可以讓你感覺不到他們的存在,但如果我們在數據庫映射實體(下文簡稱bo,即business object)中使用,就得注意了!

     比如有一個評定表,里邊有個評分字段,在寫bo時,定義評分屬性,是用int還是Integer呢?

     假如用Integer,在做數據插入時,先實例化一個bo,此時bo中的Integer類型字段,默認是null值,如果我們一不留神忘了給它一個初始值0,那么插入到數據庫中的值也是null,再查詢出來,當然也是null。

     試想,作為評分而言,下限也就是0分,怎么可能是null?於情說不通;讀者平時可能不太注意,以下代碼會拋出空指針異常:

 

1 Integer i = null;
2 
3 if(i == 0){   
4 
5 }

 

     為啥?因為java會對i進行自動拆箱,null怎么拆,當然會空指針了,於理說不通。

     既然於情於理都不通,看來我們只能用基本類型int,而int恰好解決了上述問題,因為int是基本類型,天生就有初始值0。

     有些時候,我們會直接把bo放在controller層,用來封裝參數,客戶端提交的參數,直接用一個bo來接受,就不用反復定義一堆變量,而且方便插入到數據庫。

     那么問題來了,如果我們的bo中是用基本類型int定義的屬性,那么天生就會有默認值0,就算客戶端不提交這個參數,也會有值,這樣就無法區分值0是客戶端提交的,還是默認的。

     小菜以為,解決這個問題也不難,最簡單的方法就是把0看作非法值,或者空值。如果檢查到某個值為0,就認為沒有提交該參數,或者提交的參數非法。

     當然,不能一概而論,一棒子打死所有的0。在經典的設計中,有個概念叫軟刪除,就是加個字段(比如:status)標記一下,0表示該條記錄正常,1表示已刪除。這里依然可以用0,因為這是對內的參數,作為系統內部運作使用,不涉及與客戶的交互。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM