java.lang.reflect 之参数化类型 ParameterizedType

1.源码 

package java.lang.reflect;


/**
 * ParameterizedType 表示一种参数化的类型 例如 Collection<String>
 *
 *
 * 实现了该接口的classes实例必须实现一个可以比较任何两个具有相同泛型类型生命和相同参数类型的实例的 
 * equals()方法
 * @since 1.5
 */
public interface ParameterizedType extends Type {
    /**
     * 返回一个最外层<>包裹的泛型参数类型数组
     */
    Type[] getActualTypeArguments();

    /**
     * 返回最外层<>前面的类型,即该类型的本身类型。
     * @since 1.5
     */
    Type getRawType();

    /**
     * 返回该类型的拥有者类型,针对内部类而言。
     * @since 1.5
     */
    Type getOwnerType();
}

2.举例

package com.tangjianghua.common.java.lang.reflect;

import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.*;

/**
 * @author tangjianghua
 * date 2020/3/24
 * time 14:21
 */
public class ParameterizedTypeTest {
    Map<String,String> map1;
    Map<String,Map<String,Object>> map2;
    Map<String,? extends Collection> map3;
    HashMap.Entry<String,?> entry;

    public static void main(String[] args) {
        Field[] fields = ParameterizedTypeTest.class.getDeclaredFields();
        for(Field f:fields){
            //是否是ParameterizedType
            System.out.println(f.getName()+"是否是ParameterizedType:"+(f.getGenericType() instanceof ParameterizedType));
            ParameterizedType genericType = (ParameterizedType) f.getGenericType();
            Type[] actualTypeArguments = genericType.getActualTypeArguments();
            System.out.println("getActualTypeArguments:"+ Arrays.toString(actualTypeArguments));
            Type rawType = genericType.getRawType();
            System.out.println("getRawType:"+ rawType);
            Type ownerType = genericType.getOwnerType();
            System.out.println("getOwnerType:"+ ownerType+"\n");
        }
    }
}



控制台:

map1是否是ParameterizedType:true
getActualTypeArguments:[class java.lang.String, class java.lang.String]
getRawType:interface java.util.Map
getOwnerType:null

map2是否是ParameterizedType:true
getActualTypeArguments:[class java.lang.String, java.util.Map<java.lang.String, java.lang.Object>]
getRawType:interface java.util.Map
getOwnerType:null

map3是否是ParameterizedType:true
getActualTypeArguments:[class java.lang.String, ? extends java.util.Collection]
getRawType:interface java.util.Map
getOwnerType:null

entry是否是ParameterizedType:true
getActualTypeArguments:[class java.lang.String, ?]
getRawType:interface java.util.Map$Entry
getOwnerType:interface java.util.Map


Process finished with exit code 0
发布了152 篇原创文章 · 获赞 39 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/top_explore/article/details/105071264