获取泛型map工具类

简介: 获取泛型map工具类

一个人如果抛弃他忠实的朋友,就等于抛弃他最珍贵的声明。——索福克勒斯

代码如下:

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"));
}

源码地址:https://gitee.com/VampireAchao/stream-query/blob/master/stream-core/src/main/java/io/github/vampireachao/stream/core/reflect/ReflectHelper.java

相关文章
|
6月前
|
Java
Java中的Map如何转实体类对象【附工具类相关方法】
Java中的Map如何转实体类对象【附工具类相关方法】
341 0
集合架构-Map集合及工具类
集合架构-Map集合及工具类
95 0
|
存储 算法 Java
Set、可变参数、Collections工具类、Map集合
Set、可变参数、Collections工具类、Map集合
117 0
|
Java
Java中Bean与Map之间相互转换工具类
Java中Bean与Map之间相互转换工具类
182 0
|
Java
java Object转Map 工具类
java Object转Map 工具类
896 0
|
XML 数据格式
xml和map互转工具类
/** * xml转map工具类 * @author zhangyao * */ public class XmlToMapUtil { /** * xml转map 不带属性 * @param xmlStr ...
3282 0
|
安全 Java
构建一个创建Map的工具类来辅助理解可变传参
虽说java作为编译语言,但是它本身也提供了很多运行时能力,今天介绍一个非常基础的知识点,可变参数传递 在日常的开发过程中,创建Map对象还是比较常见的,现在我希望写一个工具类,可以非常简单创建并初始化Map对象 因此我们可以实现一个MapUtil工具类,来支持这个场景
250 0
|
存储 Java 索引
java基础学习_集合类04_Map接口、Collections工具类_day18总结
======================================================================================================================================================...
1302 0