java之Type接口及其子接口

一. Type接口概述

 自从JDK1.5引入了泛型后,我们便多了一个表示类型的接口,即Type接口。Type 是 Java 编程语言中所有类型的公共高级接口。它们包括原始类型、参数化类型、数组类型、类型变量和基本类型。该接口只有一个默认的方法,表示对该接口的描述,比如参数类型等等。

1.1 Type的子接口

 ①ParameterizedType: 表示参数化类型,比如集合类型Collection<?>等等。

 ②TypeVariable: 类型变量接口,是各种类型变量的公共高级接口。

③GenericArrayType: 泛型数组类型,即元素类型是参数化类型或者类型变量类型的数组类型。

④WildcardType: 通配符表达式,又叫泛型表达式。

二. GenericDeclaration接口的介绍

 GenericDeclaration接口是声明类型变量的实体的公共接口。常见的反射类Class, Method, Constructor都是该接口的实现类。但Field类没有实现该接口,所以属性上不能声明类型变量。

2.1 GenericDeclaration的方法

该接口只有一个方法 public TypeVariable<?>[] getTypeParameters();该方法返回声明列表上的变量类型的数组。

2.2 测试

我们在类上定义了类型变量T跟V,然后我们调用getTypeParameters()方法来获取该类所声明的变量数组。然后我们遍历获取变量的名称。运行结果如下:

三.  ParameterizedType接口

该接口是参数化类型接口。如List<String>, Set<? extends T>,List<String[]>等等,即泛型。

3.1 ParameterizedType接口方法介绍

① getActualTypeArguments():这个方法是获取该参数化类型的实际类型的Type对象的数组。

② getRawType():返回声明此参数化类型的接口或类的Type对象。

③getOwnerType(): 返回一个Type对象,此类型是其成员之一。如:参数化类型为Map.Entry<String, String>,返回就是Map类型。

3.2接口测试:

四. TypeVariable接口

该接口是类型变量接口,如参数化类型中的E, V等类型变量,表示相关一类的类型。

4.1接口方法:

①getBounds():该方法返回的是该类型变量的上限的Type对象的数组。若没有,则默认为Object。

②getGenericDeclaration(): 该方法返回的是声明该类型变量的一般声明。

③getName():返回该类型变量的名称。

4.2测试:

测试结果:

注:类型变量声明不能有下限。上限当然可以,如 ? extends T。我们所传进来的参数类型必定是 T类型(T类型或其子类型),拥有T类型的属性跟方法。但是如果是下限,如 ? super T。传进来的参数不一定有T中的属性跟方法,此时我们无法具体确定,故会报错。

五. GenericArrayType接口

该接口是一种数组类型,数组元素的类型可以是参数化类型或者类型变量。

5.1 接口的方法:

①getGenericComponentType():该方法返回的是数组元素的类型的Type对象。

5.2测试:

测试结果:

六. WildcardType接口

通配符表达式或泛型表达式。如 ? extends T 或 ? super V的格式。

6.1接口方法:

①getUpperBounds():该方法返回的是该类型变量的上界的Type对象的数组。

②getLowerBounds(): 该方法返回的是该类型变量的下界的Type对象的数组。

6.2测试:

测试结果:

七. java中的所有类型

①raw type:原始类型,对应Class。不仅仅是常说的类,还有接口,枚举,注释等等。

②parameterized type:参数化类型,对应ParameterizedType接口。

③array type:数组类型,对应GenericArrayType接口。

④type variable:类型变量,对应TypeVariable接口。

⑤primitive type:基本类型,对应还是Class。

注:WildcardType接口不是java中的类型。它仅仅是一个表达式而已,可能被包含在参数化类型中,如List<? extends T>,或被包含在数组类型中,如List<? extends T>[]。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值