Java 获取泛型参数类型(通过Spring提供的GenericTypeResolver实现)

本文介绍如何在Java中利用Spring的GenericTypeResolver工具类来方便地获取泛型参数类型,解决多层级继承、多接口实现以及多个泛型参数的复杂场景,提供了一种灵活通用的解决方案。
摘要由CSDN通过智能技术生成

需求

通常在泛型参数编程中会使用如下定义:

interface Provider<T> {
  Class<T> provideClass();
}

class Provider<T>{
  Class<T> provideClass();
}

一般我们都想默认实现provideClass方法

思路

java已经提供了ParameterizedType类型来描述带泛型参数的类,通过反射获取实现或继承此接口的子类信息,可以获取到此类型,即可得到泛型参数类型

目前网上大部分文章也都是基于此思路实现。但如果有下列编写场景之一,获取过程将比较复杂,且不灵活通用

  • 多层级继承
  • 多接口实现
  • 多个泛型参数 Provider<A,B,C>的以上混合情形

例如:基于类

public class ClassTDemo {

    class Provider<T> {

    }

    class TC {
    }

    class C extends Provider<TC> {
    }

    private Class<?> resolveSuperClassParameterizedType(Class<?> source) {
        ParameterizedType parameterizedType = (ParameterizedType) source.getGenericSuperclass();
        Type[] typeArguments = parameterizedType.getActualTypeArguments();
        return
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值