您好,登錄后才能下訂單哦!
這篇文章主要講解了“為什么不建議boolean類型變量用isXXX”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“為什么不建議boolean類型變量用isXXX”吧!
背景: 平時工作中大家經常使用到boolean以及Boolean類型的數據,前者是基本數據類型,后者是包裝類,為什么不推薦使用isXXX來命名呢?到底是用基本類型的數據好呢還是用包裝類好呢?
例子:
1.其他非boolean類型 private String isHot; public String getIsHot() { return isHot; } 2.boolean類型 private boolean isHot; public boolean isHot() { return isHot; } 3.包裝類型 private Boolean isHot; public Boolean getHot() { return isHot; } 4.不以is開頭 private boolean hot; public boolean isHot() { return hot; } 5.包裝類型 private Boolean hot; public Boolean getHot() { return hot; }
其實阿里巴巴發布的java開發手冊中就寫明了,強制規定,布爾類型的數據,無論是boolean還是Boolean都不準使用isXXX來命名。
對于非boolean類型的參數,getter和setter方法命名的規范是以get和set開頭
對于boolean類型的參數,setter方法是以set開頭,但是getter方法命名的規范是以is開頭
包裝類自動生成的getter和setter方法的名稱都是getXXX()和setXXX()
其實javaBeans規范中對這些均有相應的規定,基本數據類型的屬性,其getter和setter方法是getXXX()和setXXX,但是對于基本數據中布爾類型的數據,又有一套規定,其getter和setter方法是isXXX()和setXXX。但是包裝類型都是以get開頭
這種方式在某些時候是可以正常運行的,但是在一些rpc框架里面,當反向解析讀取到isSuccess()方法的時候,rpc框架會“以為”其對應的屬性值是success,而實際上其對應的屬性值是isSuccess,導致屬性值獲取不到,從而拋出異常。
總結:
1、boolean類型的屬性值不建議設置為is開頭,否則會引起rpc框架的序列化異常。
2、如果強行將IDE自動生成的isSuccess()方法修改成getSuccess(),也能獲取到Success屬性值,若兩者并存,則之后通過getSuccess()方法獲取Success屬性值。
工作中使用基本類型的數據好還是包裝類好
咱們舉個例子,一個計算盈利的系統,其盈利比例有正有負,若使用了基本類型double定義了數據,當RPC調用時,若出現了問題,本來應該返回錯誤的,但是由于使用了基本類型,返回了0.0,系統會認為沒有任何問題,今年收支平衡,而不會發現其實是出現了錯誤。若使用了包裝數據類型Double,當RPC調用失敗時,會返回null,這樣直接就能看到出現問題了,而不會因為默認值的問題影響判斷。
其實阿里java開發手冊中對于這個也有強制規定:
因此,這里建議大家POJO中使用包裝數據類型,局部變量使用基本數據類型。
感謝各位的閱讀,以上就是“為什么不建議boolean類型變量用isXXX”的內容了,經過本文的學習后,相信大家對為什么不建議boolean類型變量用isXXX這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。