这个问题在这里已经有一个答案:>
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