Java Type 类型详解

Type和泛型的关系

Java 5以后加入了泛型特性,关于泛型的类型是什么?就要用到Type 类来描述。

package java.lang.reflect;

public interface Type {
   
    default String getTypeName() {
   
        return this.toString();
    }
}

Type 接口有一个我们熟悉的实现类 Class 类, 还有四个接口类型TypeVariable、ParameterizedType、WildcardType、GenericArrayType。

从泛型参数的声明开始

这里的泛型参数指的是 里的 T,可以在三种 位置声明: 类或者接口、 Method、 构造方法 。具体是由GenericDeclaration 这个接口决定的,顾名思义这个接口就是指哪些类上可以声明泛型。

 public interface GenericDeclaration extends AnnotatedElement {
        
    public TypeVariable<?>[] getTypeParameters();
}

GenericDeclaration 它的实现类有 Method 、Constructor、Class。
在这里插入图片描述

/***
 * 泛型参数可以在三种 位置声明: 类或则接口、 Method、 构造方法
 * @param <T>
 */
public class GenericDemo<T extends Number> {
   
    private CharSequence name;
    
    // Class 上声明的 泛型参数 T  。 
    public T t;   //t是 TypeVariable 类型
    
    public HashMap<CharSequence, T> hashMap = new HashMap<>();  //  hashMap 是 ParameterizedType 类型
    
    public HashMap rawHashMap = new HashMap<>();  // rawHashMap 是 原生类型,所以是 class 类型。
    
    public T[] tArray;   // tArray 是 GenericArrayType 类型
    
    public HashMap<? extends CharSequence, T> wildHashMap = new HashMap<>();  // wildHashMap 是 ParameterizedType 类型。 它的第一个参数 ? extends CharSequence 是 WildcardType 。

    // 构造方法处声明的泛型参数 E
    public <E extends CharSequence> GenericDemo(E e) {
   
        name = e;
    }

    // 非静态方法上声明的 泛型参数 K
    public <K extends T> void setT(K k) {
   
        t = k;
    }

    // 静态方法上声明的泛型参数 K  ,和上面非静态方法的 K 不是同一种类型,不冲突
    public static <K> 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值