zoukankan      html  css  js  c++  java
  • 获取List、Set、Map等字段的泛型参数

    测试类加单元测试方法,运行结果在注释里面:

    package temp;
    
    import org.junit.Test;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.ParameterizedType;
    import java.lang.reflect.Type;
    import java.util.List;
    import java.util.Map;
    
    public class TestClass {
    
        private List<Character> list;
    
        private Map<String, Integer> map;
    
        @Test
        public void test() throws NoSuchFieldException {
            Field listField = TestClass.class.getDeclaredField("list");
            Field mapField = TestClass.class.getDeclaredField("map");
            //对比 Field 类的 getType() 和 getGenericType()
            System.out.println(listField.getType());        // interface java.util.List
            System.out.println(listField.getGenericType()); // java.util.List<java.lang.Character>
            System.out.println(mapField.getType());         // interface java.util.Map
            System.out.println(mapField.getGenericType());  // java.util.Map<java.lang.String, java.lang.Integer>
    
            //获取 list 字段的泛型参数
            ParameterizedType listGenericType = (ParameterizedType) listField.getGenericType();
            Type[] listActualTypeArguments = listGenericType.getActualTypeArguments();
            for (int i = 0; i < listActualTypeArguments.length; i++) {
                System.out.println(listActualTypeArguments[i]);
            }
            // class java.lang.Character
    
            //获取 map 字段的泛型参数
            ParameterizedType mapGenericType = (ParameterizedType) mapField.getGenericType();
            Type[] mapActualTypeArguments = mapGenericType.getActualTypeArguments();
            for (int i = 0; i < mapActualTypeArguments.length; i++) {
                System.out.println(mapActualTypeArguments[i]);
            }
            // class java.lang.String
            // class java.lang.Integer
        }
    
    }

    待思考:

    1、java.lang.reflect.Type 和 java.lang.Class 有什么区别?

    2、java.lang.reflect.ParameterizedType 是不是就是泛型参数类型的表示?

  • 相关阅读:
    笔记:HttpResponse类
    既生瑜何生亮,为何有了类还要有结构?
    dotnet 文件下载后文件名乱码
    SQL SERVER临时表的使用
    笔记:SQL SERVER 2005中的同步复制技术(转)
    .net 四种错误处理机制
    DotNET 长文章分页方法
    HTML标签过滤方案
    过滤查询条件LIKE里面的关键字符
    理解HTTP消息头
  • 原文地址:https://www.cnblogs.com/litmmp/p/6442488.html
Copyright © 2011-2022 走看看