加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java获取通用类型的集合

发布时间:2020-12-14 05:11:30 所属栏目:Java 来源:网络整理
导读:这个问题在这里已经有一个答案: Get generic type of java.util.List12 我的项目包括反射,我正在处理通用类型. 我设法从List(java.util.List)获取通用类型: if(originalField.getGenericType() instanceof ParameterizedType){ ParameterizedType pt = (Pa
这个问题在这里已经有一个答案:> Get generic type of java.util.List12
我的项目包括反射,我正在处理通用类型.
我设法从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&gt ;.例如,见这个示例代码:
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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读