Dón*_*nal 3 java generics reflection groovy type-erasure
我有一个Groovy类,比如
class User {
List<Foo> someFoos = new ArrayList<Foo>()
List<Bar> someBars = new ArrayList<Bar>()
}
Run Code Online (Sandbox Code Playgroud)
我可以在运行时使用迭代这些属性
def user = new User()
List<MetaProperty> setProperties = user.metaClass.properties.findAll {MetaProperty property ->
property.name.startsWith('some')
}
Run Code Online (Sandbox Code Playgroud)
如果我检查每个属性的类型Set是否返回
setProperties.each {MetaProperty setProperty ->
assert setProperty.type == Set
}
Run Code Online (Sandbox Code Playgroud)
在运行时有什么办法可以为每个属性获取泛型类型参数(Foo和Bar)吗?
我强烈怀疑我不能因为类型擦除,但如果有人能证实我的怀疑,我会很感激.
是的你可以.这些是字段定义,它们在运行时保留其类型定义.我会给你java代码,你也可以在groovy中使用它(我不知道特定于groovy的解决方案)
Field[] fields = User.class.getDeclaredFields();
for (Field field : fields) {
ParameterizedType pt = (ParameterizedType) field.getGenericType();
Type concreteType = pt.getActualTypeArguments()[0];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3109 次 |
| 最近记录: |