Java获得泛型类型的集合

Gum*_*mba 11 java generics reflection

我的项目包括反射,我目前正在处理泛型类型.我已经设法从List(java.util.List)获取泛型类型:

if(originalField.getGenericType() instanceof ParameterizedType){
    ParameterizedType pt = (ParameterizedType) originalField.getGenericType();
    Class<?> subClass = (Class<?>) pt.getActualTypeArguments()[0];
}
Run Code Online (Sandbox Code Playgroud)

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

有人知道如何从集合中获取String(或任何类型)?

我一直在阅读关于java擦除的内容,所以我知道这一点,但是在将通用列表从列表中删除之后,我想也许有人知道另一个'技巧'.

谢谢.

编辑:我正在迭代所有类的字段:

for (Field originalField : someClass.getDeclaredFields())
Run Code Online (Sandbox Code Playgroud)

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

Roh*_*ain 12

你的方法很好.它应该适用于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());
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

打印出来:

java.lang.String
java.lang.String
Run Code Online (Sandbox Code Playgroud)