为什么这个有效:
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)
答案 0 :(得分:1)
我猜构造函数NormalChair("a", 4)
将String
和int
作为输入参数,对吗?
在这种情况下,我认为正确的电话是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()
,因为它没有看到该方法甚至认为它被声明为公开。也许是因为它从父类继承了方法?如果我错了,请纠正我。