java 如何返回一个类型_Java中如何获取一个类中泛型的实际类型

1.学习之前我们先来了解一些泛型的术语

<>: 念做typeof

List: E称为类型参数变量

ArrayList: Integer称为实际类型参数

ArrayList: 整个ArrayList称为参数化类型(对应着java.lang.reflect.ParameterizedType接口)

2.泛型反射相关API

Type[]  getGenericInterfaces():获得当前类实现的泛型接口(参数化类型)

举例1:

1)定义类A,C 接口B

//类B

public interface B{}

//类C

public class C{}

//A实现B,向B传入实际类型参数C

public class A implements B{}

2)测试代码

A a = new A();

Type[] types = a.getClass().getGenericInterfaces();

for (Type type : types) {

System.out.println(type);//结果是:B

}

Type[]  getGenericSuperclass():获得带有泛型的父类

举例2:

1)定义3个类A,B,C

//类B

public class B{}

//类C

public class C{}

//A继承B,向B传入实际类型参数C

public class A extends B{}

2)测试代码

A a = new A();

Type type = a.getClass().getGenericSuperclass();

System.out.println(type);//结果是:B

ParameterizedType:参数化类型接口,Type的子接口

通过上面两个案例可知getGenericInterfaces和getGenericSuperclass可以获取到参数化类型B,并且ParameterizedType是Type的子接口,将Type强转成ParameterizedType。ParameterizedType提供了一个getActualTypeArguments()方法,这个方法可以获取参数化类型中的实际类型参数。

举例3:我们对案例2测试代码进行修改

A a = new A();

//获得带有泛型的父类

Type type = a.getClass().getGenericSuperclass();

System.out.println(type);//结果是:B

//将type强转成Parameterized

ParameterizedType pt = (ParameterizedType )type;

/*得到父类(参数化类型)中的泛型(实际类型参数)的实际类型。

getActualTypeArguments()返回一个Type数组,之所以返回Type数组,是因为一个类上有可能出现多个泛型,比如:Map

*/

Type [] actualTypes = pt.getActualTypeArguments();

System.out.println(actualTypes[0]);//结果:C

获取接口泛型的实际类型参数做法跟上面代码差不多,只需要把

Type type = a.getClass().getGenericSuperclass(),改成

Type type = a.getClass().getGenericInterfaces()就可以了。

讲解完毕,如有错漏请多多包含!!!!!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值