从类名Java反射GET构造失败

Troskyvs:

我有这样的代码片段:

class You{
    public You(String s){}
}

public static void main(String[] args)  throws NoSuchMethodException {
    Constructor[] constructors = You.class.getConstructors();
    for(Constructor constructor: constructors){
        Class[] parameterTypes = constructor.getParameterTypes();
        for(Class c: parameterTypes){
            System.out.println(c.getName());//print java.lang.String
        }
    }
    Constructor constructor =
            You.class.getConstructor(String.class);//NoSuchMethodException?
}

这是很老了,当我打印的构造函数,它有一个构造函数java.lang.String的参数。但是,当我尝试You.class.getConstructor它说,没有构造函数String.class的参数。

我使用java1.8在Mac上。你会有助于解释,以及如何解决?

非常感谢。

雅各G.:

我会删除这个答案,如果不是这种情况,但看起来You是一个内部类,我怀疑你的实际代码看起来是这样的:

public class Foo {

    class You {
        public You(String s){}
    }

    public static void main(String[] args)  throws NoSuchMethodException {
        Constructor[] constructors = You.class.getConstructors();

        for (Constructor constructor: constructors) {
            Class[] parameterTypes = constructor.getParameterTypes();

            for (Class c: parameterTypes){
                System.out.println(c.getName());//print java.lang.String
            }
        }

        Constructor constructor =
            You.class.getConstructor(String.class);//NoSuchMethodException?
    }
}

文件Class#getConstructor

如果此类对象表示非静态上下文中声明的内部类,正式的参数类型包括显式封闭实例作为第一个参数。

出于这个原因,你必须使用以下改为:

Constructor constructor = You.class.getConstructor(Foo.class, String.class);

但显然取代Foo您的包围类的名称。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章