前提・実現したいこと
前回の継続の質問です。
リフレクションを用いて動的にクラスを作成したいのですがうまく行きません。
前回の質問で色々試行錯誤したことをまとめてこちらの質問に改めて投げます。
java
1 2package enshud.s2.parser; 3import java.lang.reflect.Constructor; 4 5public class Parser { 6 public static void main(final String[] args) { 7 new Parser().run("data/ts/normal01.ts"); 8 } 9 10 public void run(final String inputFileName) { 11 make_class(); 12 } 13 14 void make_class(){ 15 try { 16 Class<?> testcl = test.class; 17 Constructor<?> cons = testcl.getDeclaredConstructor(String.class); 18 cons.newInstance("ss"); 19 } catch(ReflectiveOperationException e) { 20 e.printStackTrace(); 21 } 22 } 23 24 public class test { 25 public test(String a){ 26 } 27 } 28}
このプログラムを実行すると、make_class関数でtestcl.getDeclaredConstructor
を実行した時にエラーが出ます。
### エラーメッセージ
java.lang.NoSuchMethodException: enshud.s2.parser.Parser$test.<init>(java.lang.String)
これは何故なのでしょうか?
色々試して見た結果、
java
1 public static class test { 2 public test(String a){ 3 } 4 }
とstaticをつけるとgetDeclaredConstructorはパスすることができました。しかしstaticをつけてしまうと不都合が生じるためstaticはつけたくないです。何かわかる方いらっしゃいますでしょうか?
補足情報(FW/ツールのバージョンなど)
java -JDK8
参考URL:http://www.ne.jp/asahi/hishidama/home/tech/java/reflection.html
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/03 02:49
2018/11/03 05:00