我有这样的代码片段:
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上。你会有助于解释,以及如何解决?
非常感谢。
我会删除这个答案,如果不是这种情况,但看起来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] 删除。
我来说两句