public class Test {
public static void main(String[] args) throws NoSuchMethodException, SecurityException{
Test2 t=new Test2("haha");
Class c=t.getClass();
Constructor ctr=c.getConstructor(String.class);
//为什么在此处老是输出找不到该方法的错误?
System.out.println(ctr);
}
}
class Test2{
String name;
//这里明明已经定义好了这个构造方法了啊!
Test2(String name){
this.name=name;
}
}作者: 付维翔 时间: 2012-11-1 22:52
这个问题原因在于,你定义的构造方法是不是public级别而是默认级别的,而你使用反射获构造方法使用的是getConstructor,此方法只能获取public级别的构造方法;如此解决方案有如下两个:一是认构造方法改成public级别,或者使用Constructor ctr = c.getDeclaredConstructor(String.class);来获取非public级别的构造函数作者: 黑马杨锦喜 时间: 2012-11-2 00:00
查看getConstructor方法的源代码如下:
public Constructor<T> getConstructor(Class<?>... parameterTypes)
throws NoSuchMethodException, SecurityException {
// be very careful not to change the stack depth of this
// checkMemberAccess call for security reasons
// see java.lang.SecurityManager.checkMemberAccess
checkMemberAccess(Member.PUBLIC, ClassLoader.getCallerClassLoader());
return getConstructor0(parameterTypes, Member.PUBLIC);
}
构造方法需要是public的,你才能反射的构造方法
故改为:
public Test2(String name){
this.name=name;
}