close

背景

平時工作中大家經常使用到boolean以及Boolean類型的數據,前者是基本數據類型,後者是包裝類,為什麼不推薦使用isXXX來命名呢?到底是用基本類型的數據好呢還是用包裝類好呢?

例子

1.其他非boolean類型

privateStringisHot;publicStringgetIsHot(){returnisHot;}

2.boolean類型

privatebooleanisHot;publicbooleanisHot(){returnisHot;}

3.包裝類型

privateBooleanisHot;publicBooleangetHot(){returnisHot;}

4.不以is開頭

privatebooleanhot;publicbooleanisHot(){returnhot;}

5.包裝類型

privateBooleanhot;publicBooleangetHot(){returnhot;}

其實阿里巴巴發布的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中使用包裝數據類型,局部變量使用基本數據類型。

•面試官:聊一聊Java 泛型通配符 T,E,K,V,?

•阿里一面:如何保證API接口數據安全?

•0.2秒居然複製了100G文件?

•Java17,有史以來最快 JDK!


最近寫了一套 6000 頁的 Java 學習手冊,以及珍藏四本Java 人必讀4大神器,分享到知乎已經 3 萬贊了!

每篇文章圖文並茂,附有源碼。還有電子書合集

如果你想獲得完整PDF可以通過以下方式獲得

資料獲取方法

掃描下方二維碼關注即可領取

在後台回復關鍵詞002


明天見(。・ω・。)

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()