/**
* 判断对象或对象数组中每一个对象是否为空: 对象为null,字符序列长度为0,集合类、Map为empty
*
* @param obj
* @return
*/
public
static
boolean
isNullOrEmpty(Object obj) {
if
(obj ==
null
)
return
true
;
if
(obj
instanceof
CharSequence)
return
((CharSequence) obj).length() ==
0
;
if
(obj
instanceof
Collection)
return
((Collection) obj).isEmpty();
if
(obj
instanceof
Map)
return
((Map) obj).isEmpty();
if
(obj
instanceof
Object[]) {
Object[] object = (Object[]) obj;
if
(object.length ==
0
) {
return
true
;
}
boolean
empty =
true
;
for
(
int
i =
0
; i < object.length; i++) {
if
(!isNullOrEmpty(object[i])) {
empty =
false
;
break
;
}
}
return
empty;
}
return
false
;
}
应用场景:
读取excel文件,转化为一个二维数组:Object[][] arrays
但是excel中有空行,所以需要过滤Object[][] arrays中的空的一维数组:
Java代码
/***
* 过滤数组中的空元素
*
*
* @param arrays
* @return
*/
public
static
Object[][] filterEmpty(Object[][] arrays) {
int
sumNotNull =
0
;
/***
* 统计非空元素的总个数
*/
for
(
int
i =
0
; i < arrays.length; i++) {
Object object = arrays[i];
if
(!ValueWidget.isNullOrEmpty(object)
&& !SystemUtil.isNullOrEmpty((Object[]) object)) {
// 判断元素是否为空
sumNotNull = sumNotNull +
1
;
}
}
Object[][] filtedObjs =
new
Object[sumNotNull][];
int
index =
0
;
for
(
int
i =
0
; i < arrays.length; i++) {
Object[] object_tmp = arrays[i];
if
(!ValueWidget.isNullOrEmpty(object_tmp)
&& !SystemUtil.isNullOrEmpty((Object[]) object_tmp)) {
// 判断元素是否为空
filtedObjs[index++] = object_tmp;
}
}
return
filtedObjs;
}
判断对象的所有成员变量是否为空
Java代码
/***
* Determine whether the object's fields are empty
*
* @param obj
* @param isExcludeZero :true:数值类型的值为0,则当做为空;----false:数值类型的值为0,则不为空
*
* @return
* @throws SecurityException
* @throws IllegalArgumentException
* @throws NoSuchFieldException
* @throws IllegalAccessException
*/
public
static
boolean
isNullObject(Object obj,
boolean
isExcludeZero)
throws
SecurityException, IllegalArgumentException,
NoSuchFieldException, IllegalAccessException {
if
(ValueWidget.isNullOrEmpty(obj)){
//对象本身就为null
return
true
;
}
List fieldList = ReflectHWUtils.getAllFieldList(obj.getClass());
boolean
isNull =
true
;
for
(
int
i =
0
; i < fieldList.size(); i++) {
Field f = fieldList.get(i);
Object propertyValue =
null
;
try
{
propertyValue = getObjectValue(obj, f);
}
catch
(NoSuchFieldException e) {
e.printStackTrace();
}
if
(!ValueWidget.isNullOrEmpty(propertyValue)) {
// 字段不为空
if
(propertyValue
instanceof
Integer) {
// 是数字
if
(!((Integer) propertyValue ==
0
&& isExcludeZero)) {
isNull =
false
;
break
;
}
}
else
if
(propertyValue
instanceof
Double) {
// 是数字
if
(!((Double) propertyValue ==
0
&& isExcludeZero)) {
isNull =
false
;
break
;
}
}
else
if
(propertyValue
instanceof
Float) {
// 是数字
if
(!((Float) propertyValue ==
0
&& isExcludeZero)) {
isNull =
false
;
break
;
}
}
else
if
(propertyValue
instanceof
Short) {
// 是数字
if
(!((Short) propertyValue ==
0
&& isExcludeZero)) {
isNull =
false
;
break
;
}
}
else
{
isNull =
false
;
break
;
}
}
}
return
isNull;
}
测试:
Java代码
@Test
public
void
test_isNullObject()
throws
SecurityException,
IllegalArgumentException, NoSuchFieldException,
IllegalAccessException {
Person2 p =
new
Person2();
Assert.assertEquals(
true
, ReflectHWUtils.isNullObject(p,
true
));
Assert.assertEquals(
false
, ReflectHWUtils.isNullObject(p,
false
));
p.setAddress(
"beijing"
);
Assert.assertEquals(
false
, ReflectHWUtils.isNullObject(p,
true
));
Assert.assertEquals(
false
, ReflectHWUtils.isNullObject(p,
false
));
p.setAddress(
null
);
p.setId(
0
);
Assert.assertEquals(
true
, ReflectHWUtils.isNullObject(p,
true
));
Assert.assertEquals(
false
, ReflectHWUtils.isNullObject(p,
false
));
}
Person2 源代码(省略getter,setter方法):
Java代码
import
java.sql.Timestamp;
public
class
Person2 {
private
int
id;
private
int
age;
private
double
weight;
private
String personName;
private
Timestamp birthdate;
public
String identitify;
protected
String address;
String phone;
}