得到属性类型在运行时
我有一个Groovy类如得到属性类型在运行时
class User {
List<Foo> someFoos = new ArrayList<Foo>()
List<Bar> someBars = new ArrayList<Bar>()
}
使用
如果我检查每个属性的类型,我可以通过这些属性在运行时迭代Set
是返回
setProperties.each {MetaProperty setProperty ->
assert setProperty.type == Set
}
有什么办法可以在运行时我可以得到泛型类型参数(Foo
和Bar
)对于这些属性中的每一个?
我强烈怀疑我不能因类型擦除,但如果有人可以证实我的怀疑,我会很感激。
是的,你可以。这些是字段定义,它们在运行时保留它们的类型定义。我会给你的java代码,你也可以用它在groovy(我不知道一个groovy特定的解决方案)
Field[] fields = User.class.getDeclaredFields();
for (Field field : fields) {
ParameterizedType pt = (ParameterizedType) field.getGenericType();
Type concreteType = pt.getActualTypeArguments()[0];
}
在我上面提到的情况下,从类型转换为类应该是安全的。如果没有,是否有另一个是我可以将类型转换为类? –
在这种情况下它是安全的,是的 – Bozho
工程就像一个魅力 - 鞠躬。也许有一天我会明白什么泛型类型信息在运行时被擦除 –
那些不属性,那些领域。 –
@Daniel这是一个Groovy类,所以他们属性 –