反射超详细(二)——操作泛型

不求流芳百世,只求口碑载道

写在前面的话

Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

一、操作泛型相关

写一个实体类DictResponse

public class DictResponse{

    private Long id;

    private String name;

    private BigDecimal price;

	private List<DemoResponse> demoResponseList;

	// 忽略构造函数和get,set方法
}

DictResponse类中有一个字段为泛型List,所以可以获取该字段然后拿到泛型参数类型

// java.util.List<reflect.demoResponse>
private static void getDeneric() {
    Field[] declaredFields = DictResponse.class.getDeclaredFields();
    for (Field declaredField : declaredFields) {
        if (declaredField.getType() == List.class) {
            System.out.println(declaredField.getGenericType());
        }
    }
}

发现参数DemoResponse还是一个类里面还有字段,reflect是我自定义的包名

private static void getDeneric() throws ClassNotFoundException {
    Field[] declaredFields = DictResponse.class.getDeclaredFields();
    for (Field declaredField : declaredFields) {
        if (declaredField.getType() == List.class) {
            // 打印泛型类型 java.util.List<reflect.DemoResponse>
            System.out.println(declaredField.getGenericType());

            // 获取参数化类型 reflect.DemoResponse
            ParameterizedType listGenericType = (ParameterizedType)declaredField.getGenericType();
            Type actualTypeArguments = listGenericType.getActualTypeArguments()[0];
            System.out.println(actualTypeArguments.getTypeName());

            // 发现参数 DemoResponse还是一个类里面还有字段,reflect是我自定义的包名
            String typeName = actualTypeArguments.getTypeName();
            if (typeName.startsWith("reflect")) {
                Field[] fields = Class.forName(typeName).getDeclaredFields();
                for (Field field : fields) {
                    System.out.println(field);
                }
            }
        }
    }
}

这篇文章写的感觉是为了写文章而写的文章,并没有实质性的作用只是单纯的介绍一下获取泛型的操作步骤,后面会利用前面这些讲到的技术点写一篇调用远程rpc接口的实战性的文章。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值