0

为什么这个有效:

NormalChair nc = new NormalChair("a", 4);
    System.out.println(nc.getName());

输出:

而这个没有:

Object nc_ref = Class.forName("test.NormalChair").getConstructor(String.class, Integer.class).newInstance("a",4);
Method m_get = nc_ref.getClass().getDeclaredMethod("getName");
System.out.println(m_get.invoke(nc_ref));

我明白了:

Exception in thread "main" java.lang.NoSuchMethodException: test.NormalChair.<init>(java.lang.String, java.lang.Integer)
    at java.lang.Class.getConstructor0(Class.java:2800)
    at java.lang.Class.getConstructor(Class.java:1708)
    at test.Test.main(Test.java:37)
4

3 回答 3

1

我猜构造函数NormalChair("a", 4)Stringandint作为输入参数,对吧?

在那种情况下,我认为正确的电话是getConstructor(String.class, int.class)

区别int.class不是Integer.class

希望这有帮助。

于 2013-11-10T10:08:18.623 回答
1

没有看到构造函数我不能确定,但​​我怀疑你想要int.class,不是Integer.class。(是的,这是合法的!)

Object nc_ref = Class.forName("test.NormalChair").getConstructor(
    String.class, int.class).newInstance("a", 4);
于 2013-11-10T10:08:49.063 回答
0

发现了什么问题。看来我需要使用getMethod(), not getDeclaredMethod(),因为它没有看到该方法,甚至认为它被声明为公共。也许是因为它继承了父类的方法?如我错了请纠正我。

于 2013-11-10T10:20:32.120 回答