為什麼阿里巴巴不建議 boolean 型別變數用 isXXX?

語言: CN / TW / HK

背景

平時工作中大家經常使用到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()

  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中使用包裝資料型別,區域性變數使用基本資料型別。

來自:blog.csdn.net/belongtocode/article/details/100635246

推薦閱讀