2012-01-31 2 views
0

私はイントロスペクションを使用してBeanのgetメソッドを取得していますが、結果がArrayかPrimitiveかを判断できるようにしたいと思いますが、その型がArrayListであることがわかっているときでも。同じノートでは、isArray()は、プリミティブArray、ArrayListなどのすべてのタイプの配列に対して機能しますか?Introspectorの値にisPrimitiveまたはisArrayを使用する

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. 
} 

答えて

1

このメソッドを呼び出すと、プリミティブな戻り値がラッパークラスに囲まれます。

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

あなたが包まれた戻り値にgetClassを呼び出しているので、isPrimitveはfalseを返します。 getter.getReturnType()を呼び出すと、実際の戻り値の型を取得できます。

2

コレクション(ArrayListの、など)が配列されません。それらはCollectionsの一部であるオブジェクトです。

アレイのみが配列です。

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

それらが配列されています。 - http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

+0

。それでも、isPrimitive()は、intやStringなどのプリミティブ型であることがわかっているフィールドでは機能しません。 – ryandlf

+1

Erm、 'String'はプリミティブではなくオブジェクトです。 'int'に関しては、それはプリミティブですが、あなたが何をしているのかを見ることなく、何が間違っているのかを指摘できません:)あなたは' Integer'を持っていませんか? –

+0

基本的には、Beanの各ゲッターの値がArrayList、Array、Integerまたはint、Stringなどであるかどうかをテストしようとしています。配列などの型の場合は、さらにコードをループする必要がありますそれ以外の場合は結果を処理します(チェックする必要があります)。値の型を確認する良い方法はありますか? – ryandlf

関連する問題