java反射中参数问题
来源:互联网 发布:知乎 汉景帝杀吴太子 编辑:程序博客网 时间:2024/06/08 10:49
getDeclaredMethod与getMethod区别,还有参数必须是数组吗?
函数原型:Method getMethod(String name, Class<?>... parameterTypes)
getDeclaredMethod获取该类“自身的”所有的方法(private、default、protect、public),但不包括继承的方法。
getMethod只能获取“自身的”公共方法和从父类继承的方法,和从基类继承的、从接口实现的所有public方法。
参数(无参就不用写):
即方法需要的参数,如一个函数 int Test(int a, String str);
对应的getMethod方法:
1. getMethod("Test",int.class,String.class);
2. getMethod("Test",new Class[]{int.class,String.class});
invoke()参数(无参就不用写//参数格式保持与getMethod的参数格式相同):
函数原型:Object Java.lang.reflect.Method.invoke(Object receiver, Object... args)
//Method类的invoke(Object obj,Object args[])方法接收的参数必须为对象
//如果参数为基本类型数据,必须转换为相应的包装类型的对象。
Object obj =cls.newInstance();
Method m = cls.getDeclareMethod("setAge",new Class[]{int.class,String.class});//注意:这里不能使用包装类替换基本类型
//或Method m = c.getDeclareMethod("setAge",int.class,String.class);
m.invoke(obj,15);//参数15是m方法需要的参数
Object obj =cls.newInstance();
Field field = cls.getDeclaredField("m");
System.out.println(field.get(obj));
函数原型:Method getMethod(String name, Class<?>... parameterTypes)
getDeclaredMethod获取该类“自身的”所有的方法(private、default、protect、public),但不包括继承的方法。
getMethod只能获取“自身的”公共方法和从父类继承的方法,和从基类继承的、从接口实现的所有public方法。
参数(无参就不用写):
即方法需要的参数,如一个函数 int Test(int a, String str);
对应的getMethod方法:
1. getMethod("Test",int.class,String.class);
2. getMethod("Test",new Class[]{int.class,String.class});
invoke()参数(无参就不用写//参数格式保持与getMethod的参数格式相同):
函数原型:Object Java.lang.reflect.Method.invoke(Object receiver, Object... args)
//Method类的invoke(Object obj,Object args[])方法接收的参数必须为对象
//如果参数为基本类型数据,必须转换为相应的包装类型的对象。
//invoke()方法的返回值总是对象,如果实际被调用的方法的返回类型是基本类型数据,那么invoke()方法会把它转换为相应的包装类型的对象,再将其返回
setAccessible(true):
以便能正确调用private和protected方法或成员变量。判断方法是:if (!field.isAccessible())。例如:
Class clazz = Class.forName("com.test.accessible.AccessibleTest");
AccessibleTest at = new AccessibleTest();
for (Field f : clazz.getDeclaredFields()) {
f.setAccessible(true);//AccessibleTest类中的成员变量为private,故必须进行此操作。
System.out.println(f.get(at));//获取当前对象中当前Field的value 。
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
java反射获取方法:
Class cls =Class.forName("org.apache.jasper.servlet.JspServlet");
Object obj =cls.newInstance();
Method m = cls.getDeclareMethod("setAge",new Class[]{int.class,String.class});//注意:这里不能使用包装类替换基本类型
//或Method m = c.getDeclareMethod("setAge",int.class,String.class);
m.invoke(obj,15);//参数15是m方法需要的参数
java反射获取属性:
Class cls =Class.forName("org.apache.jasper.servlet.JspServlet");
Object obj =cls.newInstance();
Field field = cls.getDeclaredField("m");
System.out.println(field.get(obj));
阅读全文
0 0
- java反射中参数问题
- java 反射中包含基础类型参数的问题
- java反射机制中反射带参数的方法
- 01 反射参数问题
- java中传参数问题
- Java中参数传递问题
- Java中参数传递问题
- java中参数传递问题
- JAVA中通过反射获得泛型的实际参数
- java中通过反射获取泛型的参数类型
- java反射,改变参数值
- Java 反射 不定参数bug
- java反射获得父类泛型参数
- Java反射相关问题
- java中的反射问题
- java中的反射问题 .
- 浅谈java反射问题
- Java中参数传递的问题
- php模拟post提交请求,调用接口
- CAP原理和BASE思想浅聊
- C语言和设计模式(之开篇)
- 10.JavaScript外部对象-BOM
- zookeeper原理
- java反射中参数问题
- easyUI学习过程(二) ----在myeclipse上创建web项目并运行html文件
- xwPython的安装与使用
- 取numpy数组的某一行某一列
- WebDriver API学习笔记
- vue-chartjs
- java SpringMVC + Mybatis 一套前台到后台完整获取数据的步骤
- COS腾讯云对象存储的集成
- SpringBoot入门--Demo篇