近期在看java的反射,产生一些疑问,想询问下。通过反射,拿到一个字节码文件的所有public类型的方法,然后调用方法,如果是有参数的方法,怎么去构造函数所对应的类型参数?并传递参数调用函数?如: public void add(String str,int x){
System.out.println(str+x);
}上面的函数,通过反射获Method对象后,怎么通过其参数类型,传递参数并调用啊?(假设调用者不知道这个函数的参数类型),完全通过反射得到参数类型,然后根据参数类型去构造实参调用。 Java
System.out.println(str+x);
}上面的函数,通过反射获Method对象后,怎么通过其参数类型,传递参数并调用啊?(假设调用者不知道这个函数的参数类型),完全通过反射得到参数类型,然后根据参数类型去构造实参调用。 Java
public class T {
public void fun(String s){
}
public void fun1(String s ,int i){
} public static void main(String[] args) throws Exception {
Class c = Class.forName("cn.com.reflect.T");
Method[] ms = c.getDeclaredMethods();
for(int i = 0;i < ms.length;i++){
Method m = ms[i];
Class[] params = m.getParameterTypes();
System.out.println(m.getName() + "方法的参数类型是:");
for(int j = 0;j < params.length;j++){
System.out.println(params[j].getName());
}
System.out.println();
}
}
}
参考下吧.
调用的话Method.revoke就可以了.
package szw.junit;import java.lang.reflect.Method;import junit.framework.Assert;
import junit.framework.TestCase;public class TestCalculator2 extends TestCase
{
public void testAdd()
{
try
{
Calculator2 cal2 = new Calculator2();
Class<Calculator2> clazz = Calculator2.class; Method method = clazz.getDeclaredMethod("add", new Class[] {
Integer.TYPE, Integer.TYPE }); method.setAccessible(true); Object result = method.invoke(cal2, new Object[] { 2, 3 }); Assert.assertEquals(5, result); }
catch (Exception ex)
{
Assert.fail();
} }
}