爲什麼boolean類型變量命名禁用is開頭---阿里規範

java中,對於非boolean類型的參數,getter和setter方法命名的規範是以get和set開頭,如下:

private String Success;
 
public String getSuccess() {
	return Success;
}
 
public void setSuccess(String success) {
	Success = success;
}


而對於boolean類型的參數,setter方法是以set開頭,但是getter方法命名的規範是以is開頭,如下:

private boolean Success;
 
public boolean isSuccess() {
    return Success;
}
 
public void setSuccess(boolean success) {
    Success = success;
}


以上的方式都是正常的。

但是,如果我們將屬性值定義爲isSuccess,再來看看生成的getter和settter方法,如下:


這種方式在某些時候是可以正常運行的,但是在一些rpc框架裏面,當反向解析讀取到isSuccess()方法的時候,rpc框架會“以爲”其對應的屬性值是success,而實際上其對應的屬性值是isSuccess,導致屬性值獲取不到,從而拋出異常。

這個時候,我就好奇了,如果我強行寫成getSuccess()的方式,會不會正常獲取到Success屬性值呢?,經過測試,發現是可以的。

那如果我兩個方法都寫了,結果是怎樣的呢?

private boolean Success;
 
public boolean isSuccess() {
    return Success;
}
 
public boolean getSuccess() {
    return Success;
}
 
public void setSuccess(boolean success) {
    Success = success;
}


結果是:只會走getSuccess()方式獲取屬性值。

總結:

1、boolean類型的屬性值不建議設置爲is開頭,否則會引起rpc框架的序列化異常。

2、如果強行將IDE自動生成的isSuccess()方法修改成getSuccess(),也能獲取到Success屬性值,若兩者並存,則之後通過getSuccess()方法獲取Success屬性值。


 

發佈了2 篇原創文章 · 獲贊 3 · 訪問量 9945
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章