前提・実現したいこと
動的にクラスからインスタンスを作りたいです。
そのためにリフレクション機能を使おうと思っているのですが、うまく行きません。
forname()
を用いて文字列からクラスを作成後、コンストラクタをconstractor
を用いて作成しようとする段階でerrorが起きてしまいます。
何が原因かわかる方いらっしゃいますでしょうか?
発生している問題・エラーメッセージ
java.lang.NoSuchMethodException: enshud.s2.parser.Parser$ProgramNameToken.<init>(enshud.s2.parser.Parser$AllExp) at java.lang.Class.getConstructor0(Class.java:3082) at java.lang.Class.getConstructor(Class.java:1825)
該当のソースコード
実行しているメソッド
java
1void make_class(AllExp parent,String strClass){ 2 // リフレクション 3 strClass = "enshud.s2.parser.Parser$" + strClass; 4 try { 5 // クラスの取得 6 Class<?> class_name = Class.forName(strClass); 7 // インスタンスの生成 8 Constructor constructor = class_name.getConstructor(AllExp.class); 9 //ここでエラー発生 10 constructor.newInstance(parent); 11 } catch(ReflectiveOperationException e) { 12 e.printStackTrace(); 13 } 14 15}
作成したいインスタンスのクラスは以下のようになっています。
#内容修正後
java
1 public class ProgramNameToken extends AllExp{//program名 2 public ProgramNameToken(AllExp parent_exp) { 3 super(parent_exp); 4 } 5 public AllExp exp_rule() { 6 new NameToken(this); 7 return this; 8 } 9 }
補足情報(FW/ツールのバージョンなど)
java -JDK8
参考URL:http://www.ne.jp/asahi/hishidama/home/tech/java/reflection.html
注意
この質問は
リンク内容に引き継ぎました。
回答3件
あなたの回答
tips
プレビュー