2016-11-15 14 views
0

我有一個類(有超類),我想檢查所有字段是否爲NULL,或者它是否爲集合,它是空的。用下面的代碼我可以檢查NULL以及它是否是一個集合,但我似乎無法投集合,以檢查它的大小:反射 - 繼承的字段全爲空或空

public static boolean objectIsEmpty(Object object) { 
    for (Class<?> c = object.getClass(); c != null; c = c.getSuperclass()) { 
     Field[] fields = c.getDeclaredFields(); 
     for (Field field : fields) { 
      field.setAccessible(true); 
      try { 
       if (field.get(object) != null) { 
        if (field.getType().equals(List.class)) { 
         // System.err.println("len " + 
         // Array.getLength(field.get(object))); 
        } 
        if (Collection.class.isAssignableFrom(field.getType())) { 
         System.err.println(Collection.class.cast(field).size()); 
         // ClassCastException thrown here 
        } 
       } 
      } catch (IllegalAccessException e) { 
       // Should not occur with setAccessible(true), return false just 
       // in case 
       e.printStackTrace(); 
       return false; 
      } 
     } 
    } 
    return true; 

但導致java.lang.ClassCastException:不能將java.lang.reflect.Field轉換爲java.util.Collection

如何獲取列表的大小?

回答

4

您不能將字段投射到集合。您可以將字段對象轉換爲集合。試試這個:

System.err.println(Collection.class.cast(field.get(object)).size()); 
+0

哦,天啊,當然。現在我想到了它的總體感覺,非常感謝快速響應! – CounterFlame

+0

不客氣:) –