Java完美获取泛型类型(包含嵌套多层的泛型)

更新时间:2023-07-25 19:49:01 阅读: 评论:0

Java完美获取泛型类型(包含嵌套多层的泛型)完美获取泛型类型(包含嵌套多层的泛型)
1. ⼯具类
2. 使⽤⽅法
2.1. 集成接⼝带有泛型
请使⽤ GenericParadigmUtil.parInterfaceGenericParadigm(…)。
提供的 Api:
Class parInterfaceGenericParadigm(Object object, int who, int position)
Class parInterfaceGenericParadigm(Class clazz, int who, int position)
Class parInterfaceGenericParadigm(Object object, int who, List< Pathfinder > pathfinders) Class parInterfaceGenericParadigm(Class clazz, int who, List< Pathfinder > pathfinders)
object: 想获取那个对象的接⼝中泛型类型
clazz: 即 Class()
who:因为⼀个类可以集成多个接⼝, who 即你想获取那个接⼝中的泛型
position: ⼀个接⼝中可能有多个泛型, ⽐如 Map 就有两个, 则 position 就是指定你想要其中的哪⼀个pathfinders: 指路⼈(即⼿动指定查询特殊路径)
2.2. 集成不是接⼝中的泛型
请使⽤ GenericParadigmUtil.parGenericParadigm(…)
提供的 Api:
Class parGenericParadigm(Object object, int position)
Class parGenericParadigm(Class clazz, int position)
Class parGenericParadigm(Object object, List< Pathfinder > pathfinders)
Class parGenericParadigm(Class clazz, List< Pathfinder > pathfinders)
object: 想获取那个对象的接⼝中泛型类型
clazz: 即 Class()
pathfinders: 指路⼈(即⼿动指定查询特殊路径)
2.3. 使⽤情况及细节介绍
情况⼀(⾮嵌套):
Class A (extend | implements) B<T, Z>
如果想获取 T 的具体类型:white是什么意思
GenericParadigmUtil.parInterfaceGenericParadigm(A,0,0)
胃痛不能吃什么or
羽毛球场规格尺寸
GenericParadigmUtil.parGenericParadigm(A,0)
如果想获取 Z 的类型
GenericParadigmUtil.parInterfaceGenericParadigm(A,0,1)
快乐之地打一地名or
GenericParadigmUtil.parGenericParadigm(A,1)
情况⼆(嵌套类型):
Class A (extend | implements) B<BaRespon<List<Map<Integer, UrInfo>>>, T>
如果使⽤情况⼀中的⽅法获取, 只能获取到最深层的泛型类型:
// 返回的类型为 Integer 的类型,因为都是取得都是位置 0 的泛型类型并且是最最深处的那个泛型
GenericParadigmUtil.parInterfaceGenericParadigm(A,0,0)
or
GenericParadigmUtil.parGenericParadigm(A,0)
// 获取 T 的类型就跟情况⼀⼀样了
GenericParadigmUtil.parInterfaceGenericParadigm(A,0,1)
or
GenericParadigmUtil.parGenericParadigm(A,1)
如果想获取 B 中最近的泛型怎么办?
请记住不指定 指路⼈, 则⼯具类只会⼀股脑的找到最深处, 如果想获取嵌套中间的某⼀个类型怎么办? 答案就需要⼿动指定指路⼈!
请先记住泛型<>就代表⼀个层级, 那么上⾯的层级怎么划分呢? 很简单:从0开始, 其中< BaRespon > 层级为0, < List > 层级为1, < Map > 层级为2, <Integer, UrInfo> 层级为3。 结束
指路⼈结构很简单
public static class Pathfinder {
public int depth;
public int position;
public Pathfinder(){
ws851
}
public Pathfinder(int in_depth,int in_position){
this.depth = in_depth;
this.position = in_position;
}
}世界最美面孔
其中 depth 就是指定的层级, position 为获取该层级的第⼏个泛型类型, ⽐如 Map 层级的就有两个泛型类型。
注意:如果需要⼿动指定指路⼈, 则从第 0 层要⼀直指定到你想要层级的泛型, 指路⼈不能缺失和跳跃。 原因很简单, ⽐如
欧美帅哥头像Map<List<Map<T, Z>>, Map<T, Z>>, 如果你缺失了其中⼀个指路⼈, 就⽆法获取到下⼀个路⼝咋⾛了!
已情况⼆为例
// Class A (extend | implements) B<BaRespon<List<Map<Integer, UrInfo>>>, T>
List<GenericParadigmUtil.Pathfinder> pathfinders =new ArrayList<GenericParadigmUtil.Pathfinder>();
pathfinders.add(new GenericParadigmUtil.Pathfinder(0,0));// --> BaRespon
几欲先走
pathfinders.add(new GenericParadigmUtil.Pathfinder(1,0));// --> List
pathfinders.add(new GenericParadigmUtil.Pathfinder(2,0));// --> Map
pathfinders.add(new GenericParadigmUtil.Pathfinder(3,0));// --> Integer
pathfinders.add(new GenericParadigmUtil.Pathfinder(3,1));// --> UrInfo
// eg:想获取 B 的泛型是什么类型
List<GenericParadigmUtil.Pathfinder> pathfinders =new ArrayList<GenericParadigmUtil.Pathfinder>();
pathfinders.add(new GenericParadigmUtil.Pathfinder(0,0));// --> BaRespon
Class clazz = GenericParadigmUtil.parInterfaceGenericParadigm(A,0, pathfinders)
or
Class clazz = GenericParadigmUtil.parGenericParadigm(A, pathfinders)
// eg: 再⽐如想获取位于 UrInfo 那个是什么类型
List<GenericParadigmUtil.Pathfinder> pathfinders =new ArrayList<GenericParadigmUtil.Pathfinder>();
pathfinders.add(new GenericParadigmUtil.Pathfinder(0,0));// --> BaRespon
pathfinders.add(new GenericParadigmUtil.Pathfinder(1,0));// --> List
pathfinders.add(new GenericParadigmUtil.Pathfinder(2,0));// --> Map
pathfinders.add(new GenericParadigmUtil.Pathfinder(3,1));// --> UrInfo
Class clazz = GenericParadigmUtil.parInterfaceGenericParadigm(A,0, pathfinders)
or
Class clazz = GenericParadigmUtil.parGenericParadigm(A, pathfinders)
题外话:如果您是 Android 或者 ios开发者,不让看看 Autonet ⽹络请求框架,可以给你节省 N 多时间。这两个我会⼀直维护。使⽤很简单,希望可以关注下,也不失是⼀种选择。或者点个星哈,多谢⽀持!

本文发布于:2023-07-25 19:49:01,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1096430.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:泛型   获取   类型
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图