错了,这个对象已经分配了内存,不是空的,用System.out.println(item)打印就知道已经存在地址,如果是空,打印null
判断一个对象是否为空,就是按那个条件判断,没有错,System.out.println()是控制台比较实用的调试,测试方法
/*** 判断对象或对象数组中每一个对象是否为空: 对象为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<Field> 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
}
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 = 0i <object.lengthi++) {
if (!isNullOrEmpty(object[i])) {
empty = false
break
}
}
return empty
}
return false
}