JAVA8 获取泛型类型问题

请教一个关于泛型的问题:有如下带泛型的接口
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分别是什么?
回首忆惘然
浏览 978回答 2
2回答

函数式编程

最开始的版本忘记了接口的情况…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);}}}

qq_花开花谢_0

除借助IDE的提示,我也不知道还有什么好办法,因为很多泛型只有在实例化时才能转为具体的类型.如果你只是在写低层架构的话,甚至可能不会与具体类弄打交道,一直都是在写抽象类型也是可能的.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript