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"}}));
}
}
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"}}));
}
}