反射对应泛型参数的调用
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"}}));
}
}
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反射学习 getClass()函数应用
- java反射实现javabean转json实例代码
- Java反射中常用的操作方法
- Java 反射
- java 通过反射获取调用类方法及属性
- Java高级编程 - 使用反射强制给private字段赋值
- Java高级编程 - 使用反射强制给private字段赋值
- java课堂练习,反射
- JAVA基础之反射
- java反射
- java基础反射
- Android获取apk签名信息(举例说明java反射调用方法步骤)
- 理解JAVA反射机制
- 黑马程序员---java基础加强 反射的深入理解
- 黑马程序员-----java基础java的反射机制
- java 通过反射获取调用类方法及属性
- java 反射调用带回调接口的函数
- JAVA反射
- 黑马程序员——【Java反射学习】Class类的使用
- 黑马程序员——【Java反射学习】方法的反射/成员变量的反射/构造函数的反射