/**  
      * 判断对象或对象数组中每一个对象是否为空: 对象为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;  

        
}