天天看點

為什麼阿裡強制 boolean 類型變量不能使用 is 開頭?

為什麼阿裡強制 boolean 類型變量不能使用 is 開頭?
為什麼阿裡強制 boolean 類型變量不能使用 is 開頭?

對于非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開發手冊中對于這個也有強制規定:

為什麼阿裡強制 boolean 類型變量不能使用 is 開頭?