2012-01-31 19 views
0

我正在使用內省檢索bean get方法,並且希望能夠確定結果是Array還是Primitive,但我總是得到一個錯誤的響應。即使當我知道該類型是一個ArrayList。在同樣的說明中,isArray()是否適用於所有類型的數組,例如基本Array,ArrayList等?在內部檢查器值上使用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() 

既然你正在呼籲包裹返回值getClassisPrimitve將返回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 2012-01-31 04:19:44

+1

Erm,'String'是一個對象,而不是一個基元。至於'int',這是一個原始的,但沒有看到你在做什麼,我不能指出什麼是錯的:)你確定你沒有'整數'? – 2012-01-31 04:22:34

+0

基本上我試圖測試bean中每個getter的值是一個ArrayList,一個Array,一個Integer或int,String等等。如果它是一個類型如數組,我的代碼將需要通過它進一步循環,否則如果不是,我會處理結果(這就是爲什麼我需要檢查)。有沒有更好的方法來驗證值類型? – ryandlf 2012-01-31 04:26:56