如何在java中使用反射查找集合的大小?

时间:2012-06-20 21:32:50

标签: java reflection collections

如何在java中使用反射找到集合的大小(即SetList)?

我有类似下面的例子,我想知道如何在使用反射时找到集合的大小。

编辑

Class<?> clazz = node.getClass();
Field [] fields = clazz.getDeclaredFields();

for(Field field : fields) {
    System.out.println("declared fields:   "+ field.getType().getCanonicalName());

    //getting a generic type of a collection
    Type returntype = field.getGenericType();
    if (returntype instanceof ParameterizedType) {
        ParameterizedType type = (ParameterizedType) returntype;
        Type[] typeArguments = type.getActualTypeArguments();
        for(Type typeArgument : typeArguments) {
           Class<?> classType = (Class<?>) typeArgument;
           System.out.println("typeArgClass = " + classType.getCanonicalName());
        }
    }
}

3 个答案:

答案 0 :(得分:2)

假设node是集合实例。

int size;
try { 
  size = (Integer) node.getClass().getMethod("size").invoke(node);
} catch (Exception e) {
  e.printStackTrace();
}

当你可以拨打node.size()时,通过反思做这件事没有多大意义。

答案 1 :(得分:0)

我不确定你使用反射是什么意思。实现java.util.Collection接口的所有类都使用size()方法来为您提供集合的大小。

答案 2 :(得分:0)

Scenario将实现一个泛型类,它为您提供对象字段的简短摘要,对于集合实例,您只想吐出大小。 我个人需要这个来比较同一类型的两个对象(o1和o2)上的某些字段。我想知道集合实例是否已更改。

Field f1 = null;

   try {
f1 = o1.getClass().getDeclaredField(field);
   }
...

if (Collection.class.isAssignableFrom(f1.getType())) { // Making sure it is of type Collection
   int v1Size = Collection.class.cast(v1).size();   //  This is what you need