2011-08-29 51 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

工程就像一个魅力 - 鞠躬。也许有一天我会明白什么泛型类型信息在运行时被擦除 –

相关问题