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

コンストラクターは入力パラメーターとしてand をNormalChair("a", 4)取るStringと思いますよね?int

その場合、正しい呼び出しは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()、 ではなくを使用する必要があるようです。getDeclaredMethod()親クラスからメソッドを継承しているからでしょうか?私が間違っている場合は修正してください。

于 2013-11-10T10:20:32.120 に答える