/**
* 判断对象或对象数组中每一个对象是否为空: 对象为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;
}
java死亡对象判断 对象判断空java
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Java使用JsonNode判断实体类非空
使用jsonNode去判断实体类的参数是否为空
jsonnode java hutool -
java中判断String类型为空和null的方法
java中判断String类型为空和null的方法
System 字符串 Apache -
【JAVA】如何判断对象已经死亡?
如何判断对象已经死亡?JVM在进行垃圾回收时,要做的第一件事情,就是去寻找那些已
引用计数法 可达性分析法 GC Roots 类对象 引用计数