黑马程序员技术交流社区

标题: 反射问题? [打印本页]

作者: 史小兵    时间: 2012-11-1 20:01
标题: 反射问题?
import java.lang.reflect.Constructor;

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;
   }




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2