Java - 使用反射实例化不起作用

时间:2013-11-10 10:02:15

标签: java reflection instantiation

为什么这个有效:

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

输出:a

这个不是:

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)

3 个答案:

答案 0 :(得分:1)

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

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

区别在于int.class而非Integer.class

希望得到这个帮助。

答案 1 :(得分:1)

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

Object nc_ref = Class.forName("test.NormalChair").getConstructor(
    String.class, int.class).newInstance("a", 4);

答案 2 :(得分:0)

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