為什麼阿里強制 boolean 型別變數不能使用 is 開頭?
來源:blog.csdn.net/belongtocode/article/details/100635246
背景
平時工作中大家經常使用到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()
獲取這份完整版手冊,在Java核心技術公眾號後臺回覆:手冊。
1.其實javaBeans規範中對這些均有相應的規定,基本資料型別的屬性,其getter和setter方法是getXXX()
和setXXX
,但是對於基本資料中布林型別的資料,又有一套規定,其getter和setter方法是isXXX()
setXXX
。但是包裝型別都是以get開頭
2.這種方式在某些時候是可以正常執行的,但是在一些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中使用包裝資料型別,區域性變數使用基本資料型別。
近期熱文推薦:
1.1,000+ 道 Java面試題及答案整理(2021最新版)
2.別在再滿屏的 if/ else 了,試試策略模式,真香!!
3.臥槽!Java 中的 xx ≠ null 是什麼新語法?
4.Spring Boot 2.6 正式釋出,一大波新特性。。
覺得不錯,別忘了隨手點贊+轉發哦!