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

  • 相关阅读:
    通过scp拷贝文件时无需交互输入密码
    suse linux安装lrzsz
    shc加密shell脚本
    linux小程序--cmatrix
    linux系统PXE+Kickstart自动安装系统
    升级SSH
    shell生成随机数的几种方法
    django —— MVT模型
    Django学习---笔记一
    python学习--Django虚拟环境搭建
  • 原文地址:https://www.cnblogs.com/litmmp/p/6442488.html
Copyright © 2011-2022 走看看