用java的反射机制执行某个方法并传递复杂参数
2014-04-18 08:15
423 查看
下面这个例子演示了如何用反射机制调用自身的multiParametersTest方法并传递复杂的函数。
get method code那段,是照着multiParametersTest的各个参数类型去填argTypes,然后根据方法名和argTypes参数类型去找定位这个类的方法。而invoke有两个参数,一个是instance(实例),如果要运行static方法,这个参数要设为null;另一个参数是Object[],这个是执行这个方法时传递的参数,它每一个元素的数据类型一定要跟argTypes和方法本身的参数类型保持一致。
get method code那段,是照着multiParametersTest的各个参数类型去填argTypes,然后根据方法名和argTypes参数类型去找定位这个类的方法。而invoke有两个参数,一个是instance(实例),如果要运行static方法,这个参数要设为null;另一个参数是Object[],这个是执行这个方法时传递的参数,它每一个元素的数据类型一定要跟argTypes和方法本身的参数类型保持一致。
package com.dgmislrh.eclassloader.test; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class Test { /** * @param args * @throws ClassNotFoundException * @throws InstantiationException * @throws InvocationTargetException * @throws IllegalAccessException * @throws IllegalArgumentException * @throws NoSuchMethodException * @throws SecurityException */ public static void main(String[] args) throws ClassNotFoundException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException, SecurityException, NoSuchMethodException { // TODO Auto-generated method stub //System.out.println("this is main entry."); Class<?> c = Class.forName(Test.class.getName());
//get method code Class[] argTypes=new Class[4]; argTypes[0]=byte[].class; argTypes[1]=int.class; argTypes[2]=int.class; argTypes[3]=String.class; Method m=c.getDeclaredMethod("multiParametersTest",argTypes);
//invode code byte[] bytes=new byte[3]; bytes[0]=1; bytes[1]=2; bytes[2]=3; m.invoke(c.newInstance(), new Object[]{bytes,100,200,"hello"}); } public static void sayHello(String name){ System.out.println("Hello,"+name); } public String getMyName(String xing){ return "My Name is :"+xing; } public String getMyNames(String[] xing){ return "My Name is :"+xing[0]+(xing.length>1?","+xing[1]:""); } public String multiParametersTest(byte[] bytes,int i,int j,String s){ System.out.println(bytes.length); System.out.println(i); System.out.println(j); System.out.println(s); return "YES"; } }
相关文章推荐
- 使用JAVA的反射机制反射带有数组参数的私有方法
- Java中方法的参数传递机制
- Java方法的参数传递机制
- java 反射机制 之 getMethod获取公有方法 getDeclaredMethod获取所有方法 然后invoke执行其所有方法
- java反射创建带构造参数的类 并执行方法
- 使用JAVA的反射机制反射带有数组参数的私有方法
- java中方法的参数传递机制
- free pascal(lazarus)版的android JNI进阶篇:反向调用java的方法并传递复杂参数
- java中利用反射机制得到一个类的所有构造方法,成员方法机器参数的列表
- java动态加载(将java类名、方法、方法参数当做参数传递,执行方法)
- java中方法的参数传递机制
- java 反射机制 之 getConstructor获取有参数构造函数 然后newInstance执行有参数的构造函数
- java 反射调用有参方法,并传递参数
- java中方法的参数传递机制
- java中方法的参数传递机制
- Java学习笔记(十)——方法的参数传递机制
- Java方法参数的传递机制 ,一片比较详细的文章
- java中的方法参数传递机制---值传递
- java中方法的参数传递机制
- java中方法的参数传递机制