您的位置:首页 > 编程语言 > Java开发

反射对应泛型参数的调用

2016-03-29 16:08 387 查看
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"}}));

       

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java反射 泛型参数