反射操作泛型

本文深入解析了Java中的泛型概念,包括ParameterizedType、GenericArrayType、TypeVariable和WildcardType等核心概念,并通过具体示例展示了如何获取方法参数和返回值的泛型信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

ParameterizedType:表示一种参数化的类型,比如Collection<String>

GenericArrayType:表示一种元素类型是参数化类型或者类型变量的数组类型。

TypeVariable:是各种类型变量的公共接口。

WildcardType:代表一种通配符类型表达式,比如?,?extends,Number,?super Integer【Wildcard是一个单词:就是通配符】

 

import java.lang.reflect.Method;

import java.lang.reflect.ParameterizedType;

import java.lang.reflect.Type;

import java.util.List;

import java.util.Map;

 

publicclass Dome1 {

   publicvoid test01(Map<String, User> map, List<User> list) {

      System.out.println("Dome1.test01");

   }

 

   public Map<Integer, User> test02() {

      returnnull;

   }

 

   publicstaticvoid main(String[] args) throws NoSuchMethodException,

          SecurityException {

      // 获取指定方法参数泛型信息。

      Method m = Dome1.class.getMethod("test01", Map.class, List.class);

      Type[] t = m.getGenericParameterTypes();

      for (Type type : t) {

          System.out.println("#" + type);

          if (type instanceof ParameterizedType) {

             Type[] genericTypes = ((ParameterizedType) type)

                   .getActualTypeArguments();

             for (Type type2 : genericTypes) {

                System.out.println("泛型类型" + type2);

             }

          }

      }

      System.out.println("=============================");

      // 获取指定方法返回值泛型信息。

      Method m2 = Dome1.class.getMethod("test02", null);

      Type returnType = m2.getGenericReturnType();

      if (returnType instanceof ParameterizedType) {

          Type[] genericType = ((ParameterizedType) returnType)

                .getActualTypeArguments();

          for (Type type : genericType) {

             System.out.println("返回值的泛型类型:" + type);

          }

      }

   }

}

 

publicclass User {

   private Integer uid;

   private String name;

 

   public Integer getUid() {

      returnuid;

   }

 

   publicvoid setUid(Integer uid) {

      this.uid = uid;

   }

 

   public String getName() {

      returnname;

   }

   publicvoid setName(String name) {

      this.name = name;

   }

}


#java.util.Map<java.lang.String, User>

泛型类型class java.lang.String

泛型类型class User

#java.util.List<User>

泛型类型class User

=============================

返回值的泛型类型:class java.lang.Integer

返回值的泛型类型:class User

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值