为什么阿里巴巴禁止开发人员 boolean 类型变量使用 isXXX 来命名?
>>號外:關注“Java精選”公眾號,菜單欄->聚合->干貨分享,回復關鍵詞領取視頻資料、開源項目。
背景
平時工作中大家經常使用到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來命名
1)對于非boolean類型的參數,getter和setter方法命名的規范是以get和set開頭
2)對于boolean類型的參數,setter方法是以set開頭,但是getter方法命名的規范是以is開頭
3)包裝類自動生成的getter和setter方法的名稱都是getXXX()和setXXX()
a. 其實javaBeans規范中對這些均有相應的規定,基本數據類型的屬性,其getter和setter方法是getXXX()和setXXX,但是對于基本數據中布爾類型的數據,又有一套規定,其getter和setter方法是isXXX()和setXXX。但是包裝類型都是以get開頭
b. 這種方式在某些時候是可以正常運行的,但是在一些rpc框架里面,當反向解析讀取到isSuccess()方法的時候,rpc框架會“以為”其對應的屬性值是success,而實際上其對應的屬性值是isSuccess,導致屬性值獲取不到,從而拋出異常。
總結
1、boolean類型的屬性值不建議設置為is開頭,否則會引起rpc框架的序列化異常。
2、如果強行將IDE自動生成的isSuccess()方法修改成getSuccess(),也能獲取到Success屬性值,若兩者并存,則之后通過getSuccess()方法獲取Success屬性值。
工作中使用基本類型的數據好還是包裝類好
咱們舉個例子,一個計算盈利的系統,其盈利比例有正有負,若使用了基本類型bouble定義了數據,當RPC調用時,若出現了問題,本來應該返回錯誤的,但是由于使用了基本類型,返回了0.0,系統會認為沒有任何問題,今年收支平衡,而不會發現其實是出現了錯誤。若使用了包裝數據類型Double,當RPC調用失敗時,會返回null,這樣直接就能看到出現問題了,而不會因為默認值的問題影響判斷。
其實阿里java開發手冊中對于這個也有強制規定
因此,這里建議大家POJO中使用包裝數據類型,局部變量使用基本數據類型。
作者:Apple_Web
blog.csdn.net/belongtocode/article/details/100635246
往期精選??點擊標題可跳轉
為什么 MyBatis 在國內非常流行,而國外 Java 工程師卻不愿意使用?
IntelliJ IDEA 使用 spring Initializr 快速搭建 spring boot 項目遇到的坑
面試官問:為什么 MySQL 中的 utf8 并不是真正的 UTF-8 編碼?
為什么程序員都說 SELECT * 效率低,那究竟是什么原因造成的?
厲害了,淘寶千萬級并發,14次分布式架構演進
Spring Cloud 中 Zuul 網關到底有何牛逼之處?竟然這么多人在用!
一次神奇的 sql 查詢經歷,group by 慢查詢優化記錄
騰訊 Tendis 正式開源,兼容 Redis 協議企業級分布式高性能 KV 存儲數據庫
中國鐵路 12306 網站的高并發架構帶來的思考?研究分析后,果然超牛逼…
IDEA JetBrains 推出 Mono 編程字體真牛逼,更適合程序開發人員!
為什么阿里規范中要求代碼禁用 static 修飾 SimpleDateFormat?
點個贊,就知道你“在看”!
總結
以上是生活随笔為你收集整理的为什么阿里巴巴禁止开发人员 boolean 类型变量使用 isXXX 来命名?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 运营笔记:SEO快排那些事儿!
- 下一篇: R语言开发之CSV文件的读写操作了解下