这个问题在这里已经有一个答案:>
Get generic type of java.util.List12
我的项目包括反射,我正在处理通用类型.
我设法从List(java.util.List)获取通用类型:
我的项目包括反射,我正在处理通用类型.
我设法从List(java.util.List)获取通用类型:
if(originalField.getGenericType() instanceof ParameterizedType){ ParameterizedType pt = (ParameterizedType) originalField.getGenericType(); Class<?> subClass = (Class<?>) pt.getActualTypeArguments()[0]; }
我也有一个集合< String>事实证明,Collection不能被转换为ParameterizedType.
有人有一个想法如何获取字符串(或任何类型将是)从集合?
我一直在阅读关于java擦除的内容,所以我知道这一点,但是在将通用程序从列表中取出后,我认为也许有人知道另一个“伎俩”.
谢谢.
编辑:
我正在迭代课程的所有领域:
for (Field originalField : someClass.getDeclaredFields())
然后当我面对一些List< String> Field,用上面的代码我得到了String作为subClass变量.
解决方法
你的方法很好它应该适用于List< String>和Collection< String> ;.例如,见这个示例代码:
public class Demo { List<String> list = new ArrayList<>(); Collection<String> coll = new ArrayList<>(); public static void main(String args[]){ Class<Demo> clazz = Demo.class; Field[] fields = clazz.getDeclaredFields(); for (Field field: fields) { Type type = field.getGenericType(); if (type instanceof ParameterizedType) { ParameterizedType pType = (ParameterizedType)type; Type[] arr = pType.getActualTypeArguments(); for (Type tp: arr) { Class<?> clzz = (Class<?>)tp; System.out.println(clzz.getName()); } } } } }
这打印出来:
java.lang.String java.lang.String