为了账号安全,请及时绑定邮箱和手机立即绑定

JAVA8 获取泛型类型问题

JAVA8 获取泛型类型问题

回首忆惘然 2019-05-09 22:19:19
请教一个关于泛型的问题:有如下带泛型的接口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(Classclazz,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());
}
}
Classsuperclass=clazz.getSuperclass();
if(superclass!=null){
findAllTypes(superclass,types);
}
for(finalClassanInterface:clazz.getInterfaces()){
findAllTypes(anInterface,types);
}
}
}
                            
查看完整回答
反对 回复 2019-05-09
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

除借助IDE的提示,我也不知道还有什么好办法,因为很多泛型只有在实例化时才能转为具体的类型.如果你只是在写低层架构的话,甚至可能不会与具体类弄打交道,一直都是在写抽象类型也是可能的.
                            
查看完整回答
反对 回复 2019-05-09
  • 2 回答
  • 0 关注
  • 977 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信