1. 程式人生 > 其它 >為什麼阿里強制 boolean 型別變數不能使用 is 開頭?

為什麼阿里強制 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 正式釋出,一大波新特性。。

5.《Java開發手冊(嵩山版)》最新發布,速速下載!

覺得不錯,別忘了隨手點贊+轉發哦!