Java获取通用类型的集合

前端之家收集整理的这篇文章主要介绍了Java获取通用类型的集合前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这个问题在这里已经有一个答案:> Get generic type of java.util.List12
我的项目包括反射,我正在处理通用类型.
我设法从List(java.util.List)获取通用类型:
  1. if(originalField.getGenericType() instanceof ParameterizedType){
  2. ParameterizedType pt = (ParameterizedType) originalField.getGenericType();
  3. Class<?> subClass = (Class<?>) pt.getActualTypeArguments()[0];
  4. }

我也有一个集合< String>事实证明,Collection不能被转换为ParameterizedType.

有人有一个想法如何获取字符串(或任何类型将是)从集合?

我一直在阅读关于java擦除的内容,所以我知道这一点,但是在将通用程序从列表中取出后,我认为也许有人知道另一个“伎俩”.

谢谢.

编辑:
我正在迭代课程的所有领域:

  1. for (Field originalField : someClass.getDeclaredFields())

然后当我面对一些List< String> Field,用上面的代码我得到了String作为subClass变量.

解决方法

你的方法很好它应该适用于List< String>和Collection< String&gt ;.例如,见这个示例代码
  1. public class Demo {
  2.  
  3. List<String> list = new ArrayList<>();
  4. Collection<String> coll = new ArrayList<>();
  5.  
  6. public static void main(String args[]){
  7.  
  8. Class<Demo> clazz = Demo.class;
  9. Field[] fields = clazz.getDeclaredFields();
  10.  
  11. for (Field field: fields) {
  12.  
  13. Type type = field.getGenericType();
  14.  
  15. if (type instanceof ParameterizedType) {
  16.  
  17. ParameterizedType pType = (ParameterizedType)type;
  18. Type[] arr = pType.getActualTypeArguments();
  19.  
  20. for (Type tp: arr) {
  21. Class<?> clzz = (Class<?>)tp;
  22. System.out.println(clzz.getName());
  23. }
  24. }
  25. }
  26. }
  27. }

这打印出来:

  1. java.lang.String
  2. java.lang.String

猜你在找的Java相关文章