首页

Java反射泛型Type接口ParameterizedType,GenericArrayType,TypeVariabl,WildcardType四种不同类型接口示例代码

标签:反射泛型,Type,ParameterizedType,GenericArrayType,TypeVariabl,WildcardType,getGenericSuperclass,getRawType,getGenericComponentType,getComponentType,getActualTypeArguments     发布时间:2018-06-23   

一、前言

关于Class类中定义反向泛型的java.lang.reflect.Type接口(如下图),其中对于四种不同java.lang.reflect.ParameterizedType(参数化类型)、java.lang.reflect.GenericArrayType(数组类型)、java.lang.reflect.WildcardType(通配符类型)、java.lang.reflect.TypeVariable(类型变量)接口场景(如下图)

Java反射泛型Type接口ParameterizedType,GenericArrayType,TypeVariabl,WildcardType四种不同类型接口示例代码

Java反射泛型Type接口ParameterizedType,GenericArrayType,TypeVariabl,WildcardType四种不同类型接口示例代码

二、代码示例

1.BaseType基类

package test;@b@@b@import java.lang.reflect.GenericArrayType;@b@import java.lang.reflect.ParameterizedType;@b@import java.lang.reflect.Type;@b@  @b@public class BaseType<T1, T2> {  @b@	@b@    class A {}  @b@    class B extends A {}  @b@    @b@    protected BaseType (){  @b@    	  @b@        Type type = getClass().getGenericSuperclass();  @b@        @b@        System.out.println("1.Type====" + type);  @b@        System.out.println("2.ParameterizedType====" + (ParameterizedType) type); @b@        System.out.println(">2.1.getRawType====" + ((ParameterizedType) type).getRawType()); @b@        Type trueType = ((ParameterizedType)type).getActualTypeArguments()[1];  @b@        if (trueType instanceof GenericArrayType) {@b@        	Type type6=((GenericArrayType) trueType).getGenericComponentType();@b@            System.out.println(">2.2.getGenericComponentType====" + type6); @b@        } @b@        System.out.println(">2.3.getComponentType====" + new String[]{}.getClass().getComponentType());@b@        @b@        System.out.println("3.getActualTypeArguments[1]====" + trueType);  @b@        type = new B().getClass().getGenericSuperclass();  @b@        System.out.println(">3.1.getActualTypeArguments[all]====" + ((ParameterizedType)type).getActualTypeArguments().length);  @b@    @b@    } @b@}

2.SubTypeTst子类

package test;@b@@b@import java.io.Serializable;@b@import java.lang.reflect.Type;@b@@b@public class SubTypeTst extends BaseType<Object, String[]> implements  Serializable {  @b@	@b@    public static void main(String[] args){  @b@    	@b@    	Type[] ts = SubTypeTst.class.getGenericInterfaces();  @b@        for (Type t:ts) {  @b@          System.out.println("0.getGenericInterfaces===="+t);  @b@        }@b@         new SubTypeTst();  @b@    }  @b@}

控制台输出结果如下

0.getGenericInterfaces====interface java.io.Serializable@b@1.Type====test.BaseType<java.lang.Object, java.lang.String[]>@b@2.ParameterizedType====test.BaseType<java.lang.Object, java.lang.String[]>@b@>2.1.getRawType====class test.BaseType@b@>2.2.getGenericComponentType====class java.lang.String@b@>2.3.getComponentType====class java.lang.String@b@3.getActualTypeArguments[1]====java.lang.String[]@b@>3.1.getActualTypeArguments[all]====0