import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;public class Test5
{
public static void main(String[] args)
{
String[] printObj = new String[]{"a","b","c"};
A a = new A();
a.test(printObj); //第一次调用test
a.test("d","e","f"); //第二次调用test
try {
Method testMethod = a.getClass().getDeclaredMethod("test", String[].class);
testMethod.invoke(a, printObj); //第三次调用test
testMethod.invoke(a, "d", "e", "f"); //第四次调用test
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}class A
{
void test(String... printObj)
{
for(String x : printObj)
{
System.out.println(x);
}
}
}
总共调用4次test方法,前2次没问题,第三次改为testMethod.invoke(a, (Object)printObj); 就OK了,为什么?
第四次如何改才能正确调用test
import java.lang.reflect.Method;
public class Test5
{
public static void main(String[] args)
{
String[] printObj = new String[]{"a","b","c"};
A a = new A();
a.test(printObj); //第一次调用test
a.test("d","e","f"); //第二次调用test
try {
Method testMethod = a.getClass().getDeclaredMethod("test", String[].class);
testMethod.invoke(a, new Object[] {printObj}); //第三次调用test
testMethod.invoke(a, new Object[] {new String[] {"d", "e", "f"}}); //第四次调用test
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}class A
{
void test(String ...printObj)
{
for(String x : printObj)
{
System.out.println(x);
}
}
}
别人要这个,你不给,当然不给你干活。
A.java代码添加test2方法
class A
{
void test2(String str) {
System.out.println(str);
}
void test(String ...printObj)
{
for(String x : printObj)
{
System.out.println(x);
}
}
}反射调用test2如下:
Method testMethod = a.getClass().getDeclaredMethod("test2", String.class);
testMethod.invoke(a, new Object[] {"rvalue"});
invoke第一参数是调用方法的对象。第二参数就是可变参数,参数个数是一个。new Object[]{}
具体的值放在数组里。同理你写的test方法也要满足这个规则。Good Luck