在Introspector值上使用isPrimitive或isArray

时间:2012-01-31 04:12:24

标签: java introspection

我正在使用内省来检索bean获取方法,并且我希望能够确定结果是数组还是基元,但我总是得到错误的响应。即使我知道该类型是ArrayList。同样,isArray()是否适用于所有类型的数组,例如原始数组,ArrayList等?

Class<?> className = bean1.getClass();
ArrayList<ComparatorValue> updateIndexes = new ArrayList<ComparatorValue>();            
BeanInfo beanInfo = Introspector.getBeanInfo(className);
PropertyDescriptor classProperties[] = beanInfo.getPropertyDescriptors();


for(int i=0; i<classProperties.length; i++) {
    Method getter = classProperties[i].getReadMethod();
    System.out.println(getter.invoke(bean1).getClass().isArray()); //Always false.
    System.out.println(getter.invoke(bean1).getClass().isPrimitive()); //Always false.
}

2 个答案:

答案 0 :(得分:2)

集合(ArrayList等)不是数组。它们是属于Collections的对象。

只有数组是数组;

int[] foo = new int[5];
Object[] bar = new Object[4];

那些是数组。 - http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

答案 1 :(得分:1)

当您调用该方法时,原始返回值将被装入其包装类中。

getter.invoke(bean1).getClass().isPrimitive()

由于您在包装的返回值上调用getClassisPrimitve将返回false。您可以通过调用getter.getReturnType()来检索实际的返回类型。