Использование isPrimitive или isArray для значений Introspector - PullRequest
0 голосов
/ 31 января 2012

Я использую самоанализ для получения методов получения bean-компонентов, и я хотел бы иметь возможность определить, является ли результат массивом или примитивом, но я всегда получаю ложный ответ.Даже когда я знаю, что типом является ArrayList.На этой же ноте, будет ли isArray () работать для всех типов массивов, таких как примитивный Array, 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 ]

2 голосов
/ 31 января 2012

Коллекции (ArrayList и т. Д.) Не являются массивами. Это объекты, которые являются частью Коллекций .

Только массивы являются массивами;

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

Эти являются массивами. - http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

1 голос
/ 31 января 2012

Когда вы вызываете метод, примитивное возвращаемое значение помещается в его класс-оболочку.

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

Так как вы вызываете getClass в возвращаемом завернутом значении, isPrimitve вернет false. Вы можете получить фактический тип возврата, позвонив getter.getReturnType().

...