Java对象为空的判断

/** 
      * 判断对象或对象数组中每一个对象是否为空: 对象为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;  
       
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值