阿里巴巴不建議 boolean 類型變量用 isXXX的理由?

背景

平時工做中你們常常使用到boolean以及Boolean類型的數據,前者是基本數據類型,後者是包裝類,爲何不推薦使用isXXX來命名呢?究竟是用基本類型的數據好呢仍是用包裝類好呢?Java面試寶典PDF完整版java

例子:

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 類型變量用 isXXX的理由?

  • 對於非boolean類型的參數,getter和setter方法命名的規範是以get和set開頭框架

  • 對於boolean類型的參數,setter方法是以set開頭,可是getter方法命名的規範是以is開頭ide

  • 包裝類自動生成的getter和setter方法的名稱都是getXXX()和setXXX()
  1. 其實javaBeans規範中對這些均有相應的規定,基本數據類型的屬性,其getter和setter方法是getXXX()和setXXX,可是對於基本數據中布爾類型的數據,又有一套規定,其getter和setter方法是isXXX()和setXXX。可是包裝類型都是以get開頭3d

  2. 這種方式在某些時候是能夠正常運行的,可是在一些rpc框架裏面,當反向解析讀取到isSuccess()方法的時候,rpc框架會「覺得」其對應的屬性值是success,而實際上其對應的屬性值是isSuccess,致使屬性值獲取不到,從而拋出異常。

一、boolean類型的屬性值不建議設置爲is開頭,不然會引發rpc框架的序列化異常。code

二、若是強行將IDE自動生成的isSuccess()方法修改爲getSuccess(),也能獲取到Success屬性值,若二者並存,則以後經過getSuccess()方法獲取Success屬性值。blog

工做中使用基本類型的數據好仍是包裝類好?

我們舉個例子,一個計算盈利的系統,其盈利比例有正有負,若使用了基本類型bouble定義了數據,當RPC調用時,若出現了問題,原本應該返回錯誤的,可是因爲使用了基本類型,返回了0.0,系統會認爲沒有任何問題,今年收支平衡,而不會發現實際上是出現了錯誤。若使用了包裝數據類型Double,當RPC調用失敗時,會返回null,這樣直接就能看到出現問題了,而不會由於默認值的問題影響判斷。token

其實阿里java開發手冊中對於這個也有強制規定:開發

阿里巴巴不建議 boolean 類型變量用 isXXX的理由?

所以,這裏建議你們POJO中使用包裝數據類型,局部變量使用基本數據類型。Java面試寶典PDF完整版rpc

相關文章
相關標籤/搜索