获得泛型的实际类型
import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; class MyClass { } class MyInvoke { } class Param<T1, T2> { class A { } class B extends A { } private Class<T1> entityClass; public Param() { Type superClass = getClass().getGenericSuperclass(); System.out.println("当前类:" + getClass()); System.out.println("当前类的直接父类:" + superClass); // getActualTypeArguments()返回表示此类型实际类型参数的Type对象的数组。[0]就是这个数组中第一个,也就是获得超类的泛型参数的实际类型。 Type trueType = ((ParameterizedType) superClass).getActualTypeArguments()[0]; System.out.println("超类的泛型参数的实际类型1 = " + trueType); trueType = ((ParameterizedType) superClass).getActualTypeArguments()[1]; System.out.println("超类的泛型参数的实际类型2 = " + trueType); this.entityClass = (Class<T1>) trueType; System.out.println("entityClass = " + entityClass); B t = new B(); // B的直接父类A superClass = t.getClass().getGenericSuperclass(); System.out.println("B类的父类的泛型参数个数:" + ((ParameterizedType) superClass).getActualTypeArguments().length); } } class ClassDemo extends Param<MyClass, MyInvoke> { public static void main(String[] args) { ClassDemo classDemo = new ClassDemo(); } }
本文作者:n1ce2cv
本文链接:https://www.cnblogs.com/sprinining/p/15900195.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步