获取泛型map工具类
2023-02-18 16:33:39 时间
一个人如果抛弃他忠实的朋友,就等于抛弃他最珍贵的声明。——索福克勒斯
代码如下:
public static Map<String, Type> getGenericMap(Type paramType) {
Type type = resolveType(paramType);
if (type instanceof ParameterizedTypeImpl) {
ParameterizedTypeImpl ty = (ParameterizedTypeImpl) type;
final Class<?> rawType = ty.getRawType();
return Steam.of(rawType.getTypeParameters()).map(Type::getTypeName)
.zip(Steam.of(ty.getActualTypeArguments()), Maps::entry)
.collect(Collective.entryToMap(LinkedHashMap::new));
}
return new HashMap<>();
}
private static Type resolveType(Type paramType) {
Type type;
for (type = paramType;
type instanceof Class;
type = ((Class<?>) type).getGenericSuperclass()) {
if (Object.class.equals(type)) {
Type[] genericInterfaces = ((Class<?>) type).getGenericInterfaces();
if (genericInterfaces.length > 0 && Objects.nonNull(genericInterfaces[0])) {
type = genericInterfaces[0];
}
}
}
return type;
}
使用如下:
@Test
void testGetGenericMap() {
final Map<String, Type> genericMap = ReflectHelper.getGenericMap(new HashMap<String, TreeMap<String, Object>>() {
}.getClass());
Assertions.assertEquals(String.class, genericMap.get("K"));
Assertions.assertEquals(ParameterizedTypeImpl.make(TreeMap.class, new Type[]{String.class, Object.class}, null), genericMap.get("V"));
}
相关文章
- LeetCode - #70 爬楼梯(Top 100)
- LeetCode - #71 简化路径
- LeetCode - #72 编辑距离(Top 100)
- LeetCode - #73 矩阵置零
- LeetCode - #74 搜索二维矩阵
- [Maven进阶]聚合和继承
- Ichunqiu云境 - Delegation Writeup
- 在搭载 M1 及 M2 芯片 MacBook 设备上玩 Stable Diffusion 模型
- 在 Ubuntu 上安装 Discourse 开发环境
- 用户重复注册分析-多线程事务中加锁引发的bug
- 基于51单片机的简易抢答器
- 设计分享|74HC154译码器实现流水灯
- adobe photoshop软件2023最新版下载安装
- Photoshop2023最新完美版一键式安装教程
- DaVinci Resolve2023永久免费版下载安装教程
- 3dmax软件2023最新免费版下载
- 3dmax软件2023最新软件中文Crack下载
- AE2023After Effects软件最新版一键安装下载教程
- RabbitMQ源码包集群部署(最新版本)
- 2022-12-10:给你一个由小写字母组成的字符串 s ,和一个整数 k 如果满足下述条件,则可以将字符串 t 视作是 理想字符串 : t 是字符串 s 的一