2011-08-29 97 views
3

我有一個Groovy類如得到屬性類型在運行時

class User { 
    List<Foo> someFoos = new ArrayList<Foo>() 
    List<Bar> someBars = new ArrayList<Bar>()  
} 

使用

如果我檢查每個屬性的類型,我可以通過這些屬性在運行時迭代Set是返回

setProperties.each {MetaProperty setProperty -> 
    assert setProperty.type == Set  
} 

有什麼辦法可以在運行時我可以得到泛型類型參數(FooBar)對於這些屬性中的每一個?

我強烈懷疑我不能因類型擦除,但如果有人可以證實我的懷疑,我會很感激。

+1

那些不屬性,那些領域。 –

+0

@Daniel這是一個Groovy類,所以他們屬性 –

回答

8

是的,你可以。這些是字段定義,它們在運行時保留它們的類型定義。我會給你的java代碼,你也可以用它在groovy(我不知道一個groovy特定的解決方案)

Field[] fields = User.class.getDeclaredFields(); 
for (Field field : fields) { 
    ParameterizedType pt = (ParameterizedType) field.getGenericType(); 
    Type concreteType = pt.getActualTypeArguments()[0]; 
} 
+0

在我上面提到的情況下,從類型轉換爲類應該是安全的。如果沒有,是否有另一個是我可以將類型轉換爲類? –

+0

在這種情況下它是安全的,是的 – Bozho

+0

工程就像一個魅力 - 鞠躬。也許有一天我會明白什麼泛型類型信息在運行時被擦除 –