如何在java中使用反射找到集合的大小(即Set
或List
)?
我有类似下面的例子,我想知道如何在使用反射时找到集合的大小。
编辑
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());
}
}
}
答案 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