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 是不是就是泛型参数类型的表示?

  • 相关阅读:
    Java反射机制之初见端倪
    DB2日常维护之优化 【优化】
    db2pd 分析锁等待 步骤 【监控】
    DB2 UDF
    db2中会导致表处于reorg pending状态的alter语句
    利用Explain分析SQL【监控】
    Hibernate之Hello World篇
    规划下时间 13.0413.08
    神经网络
    ML EX3
  • 原文地址:https://www.cnblogs.com/litmmp/p/6442488.html
Copyright © 2011-2022 走看看