反射对应泛型参数的调用

package invokeGenerator;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.Map;

import org.omg.Dynamic.Parameter;

class User{
       public Map<String,Object> map;
           
 }
 
/*
 * 获取含泛型的字段,获取泛型的类型;在GeneratorDao中会用到
 */
public class Generator {
      public static void main(String[] args) throws Exception {
       Class claz = User.class;
       Field ma=claz.getField("map");
       /*获取字段*/
       System.out.println(ma);
       /*得到字段名称*/
       System.out.println(ma.getName());
        
       /*调用getGenericType获取一个泛型类型 (type是所以泛型类型的接口)*/
       Type type =  ma.getGenericType();
       System.out.println(type);
       
       /*强转为参数泛型类型*/
       ParameterizedType  paraType = (ParameterizedType) type;
       
       /*调用方法getActualTypeArguments;获取到参数的泛型类型*/
       Type[]  types = paraType.getActualTypeArguments();
       System.out.println(types[0]+"***"+types[1]);
       
      /********************************操作泛型参数的方法******************************/
       /*1获取该泛型参数方法所在类的class对象(以Arrays为例子)*/
       
       Class array = Arrays.class;
       
       /*2.由于不知道具体方法的具体参数类型所以这里先获取所有方法,然后筛选需要测试的方法*/
       
       Method[]  arrayMetods = array.getMethods();
         
       /*遍历获取的方法数组,通过方法名筛选测试的方法*/
       Method asList = null;
       for(Method method:arrayMetods){
           if("asList".equals(method.getName())){
           asList = method;
           System.out.println(method);
           }
           
         //  System.out.println(method);
       }
       
       /*3调用方法*/
       /*注意不定参数的传递方式*/
        System.out.println(asList.invoke(null, new Object[]{new Object[]{"a","b","c","d"}}));
       
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值