import java.lang.reflect.Constructor;
import java.lang.reflect.Method;class Person {
public Person(){
}
public Class[] function(Class[] args) {
System.out.println("public Class[] function(Class [] args)");
return null;
}
}public class Demo { public static void main(String[] args) throws Exception {
Test6();
} // 我要反射Person的方法public Class[] function(Class [] args)
public static void Test6() throws Exception {
Class Person = Class.forName("Person");
Constructor con = Person.getConstructor();
Person p = (Person) con.newInstance();
Method m = Person.getMethod("function", Class[].class);
m.invoke(p, new Class[] {String.class,int.class});//这里为什么有错?
}}
import java.lang.reflect.Method;class Person {
public Person(){
}
public Class[] function(Class[] args) {
System.out.println("public Class[] function(Class [] args)");
return null;
}
}public class Demo { public static void main(String[] args) throws Exception {
Test6();
} // 我要反射Person的方法public Class[] function(Class [] args)
public static void Test6() throws Exception {
Class Person = Class.forName("Person");
Constructor con = Person.getConstructor();
Person p = (Person) con.newInstance();
Method m = Person.getMethod("function", Class[].class);
m.invoke(p, new Class[] {String.class,int.class});//这里为什么有错?
}}
解决方案 »
- 大家小年夜快乐!不过还是打扰大家问一个关于java连上数据库的问题
- 菜鸟的渴望.
- 能不能通过编写脚本降低jvm内存占用?
- 请JAVA SWING高手进来看一下。。还有小蚊子同学有空的话也帮看一下 @_@~
- java.sql.SQLException: Io 异常: Got minus one from a read call
- 问一个对我很重要的问题,希望大家尽快告诉我,谢了!
- 请教: Linux下Java环境的配置
- char型怎么转换成String型?(答对结帖)
- 关于socket通讯的Thread问题
- 求教connection的问题!谢谢
- 数据库数据太多,查询时发生java heap space错误.
- 如何正确的选择IT培训机构
所以你调用此方法时new Class[]{String.class,int.class}这个参数被拆成了两个String.class,int.class所以就报出参数个数不对了。要让他能够运行通过,那么我们只要让编译器不拆箱就行了。可以这么调
m.invoke(p,(Object)new Class[]{String.class,int.class});
把这个数组转成Object就等于告诉编译器我这个是个对象不是一个数组别给我拆箱。
int j = i;//自动拆箱(就是将基本包装对象转为基本数据类型)我查询了可变参数的特点就是当传入数组的时候先把数组打散这个特点和拆装箱没关系吧??
m.invoke(p, new Object[] {new Class[] {String.class,int.class}});
invoke的第二个参数是调用方法的参数,是Object的数组,你的new Class[] {String.class,int.class}只是其中一个参数^_^
Class Person = Class.forName("com.huangjunwei.Person");
Constructor con = Person.getConstructor();
Person p = (Person) con.newInstance();
Method m = Person.getMethod("function", Class[].class);
Class[] clazzs = new Class[] {String.class,int.class};
m.invoke(p, new Object[]{clazzs});//这次就没错了
}
你看了invoke源代码就会发现第二个参数传入的是一个Object数组,所以你应该写成Object数组中包含你的function方法的Class数组,就是应该是一个二维数组。什么自动拆装啊,和这半毛钱的关系都没有。