反射操作泛型

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#语言的反射方法泛型是指使用反射机制来获取和操作泛型类型和泛型方法。泛型类型和泛型方法是C#语言中的重要概念,它们可以为开发者提供更加灵活和通用的编程方式。 反射机制是指在程序运行时动态地获取和操作程序中的类型信息。通过反射机制,我们可以获取类型的属性、方法、事件等信息,并且可以动态地创建对象、调用方法、设置属性等操作。 在C#语言中,我们可以使用反射机制来获取泛型类型和泛型方法的信息。例如,我们可以使用以下代码来获取一个泛型类型的信息: Type genericType = typeof(List<>); 在上面的代码中,我们使用typeof关键字和<>符号来获取一个泛型类型List<>的信息。通过这个Type对象,我们可以获取这个泛型类型的各种信息,例如它的名称、命名空间、基类型、泛型参数等等。 除了获取泛型类型的信息之外,我们还可以使用反射机制来获取泛型方法的信息。例如,我们可以使用以下代码来获取一个泛型方法的信息: MethodInfo genericMethod = typeof(List<>).GetMethod("Add"); 在上面的代码中,我们使用GetMethod方法来获取List<>类型中的Add方法的信息。通过这个MethodInfo对象,我们可以获取这个泛型方法的各种信息,例如它的名称、返回类型、参数列表、泛型参数等等。 总的来说,C#语言的反射方法泛型是一个非常强大和灵活的编程方式。通过反射机制,我们可以动态地获取和操作程序中的类型信息,从而实现更加通用和灵活的编程方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值