2016-11-15 1 views
0

私はすべてのフィールドがNULLか、コレクションであるかどうかをチェックしたいクラス(スーパークラスを持っています)を持っています。次のコードで、私は、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

あなたは大歓迎です:) –

関連する問題