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

  • 相关阅读:
    Angularjs演示Service功能
    初始化应用程序数据ng-init指令
    AngularJs的ng-include的使用与实现
    把视图转换为字符串
    学习angularjs的内置API函数
    AngularJs自定义过滤器filter
    ASP.NET MVC的切片(Section)脚本(script)
    在ASP.NET MVC部署AngularJs
    MS SQL的某一数据库成了Single User模式
    AngularJs的MVC模式
  • 原文地址:https://www.cnblogs.com/litmmp/p/6442488.html
Copyright © 2011-2022 走看看