请教一个关于泛型的问题:有如下带泛型的接口publicinterfaceAAA{}publicinterfaceBBBextendsAAA{}publicinterfaceCCCextendsBBB{}publicclassDDDimplementsCCC{}我想获取任意继承了AAA接口或实现了AAA接口的类型,对应AAA泛型参数中C,M,S分别对应什么实际类型。例如:DDD中,C=Integer,M=String,S=BooleanBBB中,C=,M=String,S=Boolean有时这个类型是用在字段的前面,同时距离AAA有好几层继承关系,有没有什么好办法,可以方便地获知,最终的类型对应AAA的参数C,M,S分别是什么?
2 回答
函数式编程
TA贡献1807条经验 获得超9个赞
最开始的版本忘记了接口的情况…publicclassEEE{publicstaticvoidmain(String[]args){Listtypes=newArrayList<>(); findAllTypes(DDD.class,types);System.out.println(types);}privatestaticvoidfindAllTypes(Class>clazz,Listtypes){ TypegenericSuperclass=clazz.getGenericSuperclass();if(genericSuperclassinstanceofParameterizedType){Collections.addAll(types,((ParameterizedType)genericSuperclass).getActualTypeArguments());}Type[]genericInterfaces=clazz.getGenericInterfaces();for(finalTypegenericInterface:genericInterfaces){if(genericInterfaceinstanceofParameterizedType){Collections.addAll(types,((ParameterizedType)genericInterface).getActualTypeArguments());}}Class>superclass=clazz.getSuperclass();if(superclass!=null){findAllTypes(superclass,types);}for(finalClass>anInterface:clazz.getInterfaces()){findAllTypes(anInterface,types);}}}
qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
除借助IDE的提示,我也不知道还有什么好办法,因为很多泛型只有在实例化时才能转为具体的类型.如果你只是在写低层架构的话,甚至可能不会与具体类弄打交道,一直都是在写抽象类型也是可能的.
添加回答
举报
0/150
提交
取消