1、**依賴了hutool的相關api,如果不想依賴hutool的話可以用阿帕奇或者spring的相關api進行替換。
2、對於是否為空的標準在**裡是寫死的,詳見注釋。
工具類的**如下:
/**
* 的過載方法,ignoreboolean引數為false
* * @param object 要判斷的物件
* @return object的所有屬性是否都為空
*/public
static boolean isdeepempty
(object object)
/** * 遞迴判斷物件及其所有父類的所有屬性是否為空。
* 判斷是否為空的標準:
* *
* @param object 要判斷的物件
* @param ignoreboolean 是否忽略布林型別的比較,因為布林型別只有真或者假,區分度較低
* @return object的所有屬性是否都為空
*/public
static boolean isdeepempty
(object object, boolean ignoreboolean)
else
if(object instanceof
iterable)}
);return allempty.
get();
}return
true;}
else
if(object.
getclass()
.isarray()
&& arrayutil.
isnotempty
(object)
)else
if(object instanceof
charsequence
)else
if(object instanceof
map)
else
catch
(illegalacces***ception e)
catch
(illegalacces***ception illegalacces***ception)}if
(objects.
isnull
(value)
)continue
;else
} currentclass = currentclass.
getsuperclass()
;}}return
true;}
/** * 判斷傳入的物件是否是基本型別的預設值。
* 當類成員為基本型別時,即使沒有對其初始化,jvm會為其賦初始值,八大型別的預設值如下所示:
* * boolean ---》 false
* * char ---》 '/uoooo'(null)
* * byte ---》 (byte)0
* * short ---》 (short)0
* * int ---》 0
* * long ---》 0l
* * float ---》 0.0f
* * double ---》 0.0d
* * @param object 待判斷的值
* @param ignoreboolean 是否忽略boolean型別的判斷
* @return 當object為基本型別的預設值時,返回,否則返回false
*/public
static
boolean
isprimitivedefault
(object object, boolean ignoreboolean)
else
if(typename.
equalsignorecase
(byte.
class
.get******name()
))else
if(typename.
equalsignorecase
(long.
class
.get******name()
))else
if(typename.
equalsignorecase
(double.
class
.get******name()
))else
if(typename.
equalsignorecase
(float.
class
.get******name()
))else
if(typename.
equalsignorecase
(character.
class
.get******name()
))else
if(typename.
equalsignorecase
(short.
class
.get******name()
))elseif(
!ignoreboolean && typename.
equalsignorecase
(boolean.
class
.get******name()
))return
false
;}
public
class
objectutiltest
/** * 測試基本資料型別的預設值
*/@test
public
void
testprimitive()
/** * 測試是否忽略boolean型別
*/@test
public
void
testignoreboolean()
/** * 測試繼承父類屬性
*/@test
public
void
testextend()
/** * 測試pojo巢狀
*/@test
public
void
testnestpojo()
/** * 測試入參為陣列
*/@test
public
void
testarray()
; assert.
assertequals
(true
, objectutil.
isdeepempty
(emptystudentarray));
student[
] notemptystudentarray =
; assert.
assertequals
(false
, objectutil.
isdeepempty
(notemptystudentarray));
}/**
* 測試迭代器
*/@test
public
void
testiterator()
/** * 測試入參字串
*/@test
public
void
teststring()
/** * 測試入參為map介面的例項
*/@test
public
void
testmap()
/** * 測試無效的屬性名是否會被跳過 如:
* * 以$開頭的屬性* 序列化屬性serialversionuid* 名字為class的屬性* */
@test
public
void
testinvalidpropertyname()
/** * 測試pojo巢狀集合的情況
*/@test
public
void
testpojonextlist()
/** * 課程類
*/class
course
public
void
setname
(string name)
public
void
setstudents
(list
students)
}class
people
public
void
setname
(string name)
}class
serialobject
implements
serializable
public
void
setname
(string name)
}class
student
extends
people
public
student
(string nickname)
public course getcourse()
public
void
setcourse
(course course)
public boolean getpretty()
public
void
setpretty
(boolean pretty)
}}
陣列或集合呼叫前,判斷是否為空
首先,了解一下null和.length size的區別 null就是意思只定義沒有建立物件,如 object o 如果呼叫o.length會報錯,因為它沒有任何.功能。length則是判斷這個陣列的元素個數,size類似。然後,寫好的程式中如果我們沒有稍加判斷,在呼叫的時候,如果為空或長度小於零,這...
判斷物件是否是空物件
object.keys 方法會返回乙個由乙個給定物件的自身可列舉屬性組成的陣列。通過陣列中屬性的個數判斷是否為空物件。const empty object.keys empty length 0 empty.constructor object 而且需要判斷物件的constructor屬性是否等於o...
js 判斷是否為空物件 空陣列
js 判斷是否為空物件 空陣列 當需要判斷引數是否為空時,總希望 js 能夠提供原生的判斷方法,可惜並沒有,只能自己封裝了。isempty function obj 檢驗陣列 if array.prototype.isprototypeof obj obj.length 0 檢驗物件 if obje...