反射操作泛型
发布日期:2021-05-14 16:20:28 浏览次数:18 分类:精选文章

本文共 1836 字,大约阅读时间需要 6 分钟。

Java反射操作中的泛型类型

Java的泛型机制在编译后会进行类型擦除,这意味着在运行时无法直接获取原始泛型信息。为了通过反射操作这些类型,Java引入了多个反射API:

泛型类型分类

  • ParameterizedType:表示参数化类型,例如集合Collection
  • GenericArrayType:表示元素类型是参数化类型或类型变量的数组类型。
  • TypeVariable:是各种类型变量的公共父接口。
  • WildcardType:表示通配符类型表达式。
  • 代码案例

    public class Test10 {
    public void test01(Map
    map, List
    list) {
    System.out.println("test01");
    }
    public Map
    test02() {
    System.out.println(test02());
    return null;
    }
    public static void main(String[] args) throws NoSuchMethodException {
    Method method = Test10.class.getMethod("test01", Map.class, List.class);
    Type[] genericParameterTypes = method.getGenericParameterTypes();
    for (Type genericParameterType : genericParameterTypes) {
    if (genericParameterType instanceof ParameterizedType) {
    Type[] actualTypeArguments = ((ParameterizedType) genericParameterType).getActualTypeArguments();
    for (Type typeArgument : actualTypeArguments) {
    System.out.println(typeArgument);
    }
    }
    }
    System.out.println("----------");
    method = Test10.class.getMethod("test02");
    Type genericReturnType = method.getGenericReturnType();
    if (genericReturnType instanceof ParameterizedType) {
    Type[] actualTypeArguments = ((ParameterizedType) genericReturnType).getActualTypeArguments();
    for (Type typeArgument : actualTypeArguments) {
    System.out.println(typeArgument);
    }
    }
    }
    }

    代码解读

  • 获取方法参数的泛型类型

    • 使用method.getGenericParameterTypes()获取方法参数的泛型类型数组。
    • 遍历每个Type对象,如果是ParameterizedType,则获取其实际类型参数。
  • 获取方法返回值的泛型类型

    • 使用method.getGenericReturnType()获取方法返回值的泛型类型。
    • 同样检查是否是ParameterizedType,并获取实际类型参数。
  • 通过反射操作,可以在运行时获取和操作泛型类型信息,从而实现对泛型数据的安全处理和类型验证。

    上一篇:反射操作注解简单案例
    下一篇:动态创建对象执行方法

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2025年04月11日 05时45分26秒