Reflectionを使用してArrayList
を宣言しようとしています。以下は私のコードNoSuchMethodException java.lang.Integerのパラメーターがコンストラクター(Reflection)で渡される場合
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException {
String intClass="java.lang.Integer"; //This string will be replaced by a string taken from user which will be a class name.
Class classOf=Class.forName("java.util.ArrayList");
Class[] parameterslist ={Class.forName(intClass)};
Constructor constructorOfClass=classOf.getConstructor(parameterslist);
}
私はこのコードを実行すると、私は
Class[] parameterslist={int.class}
としてparameterslistを変更すると、それは動作しますが、私のように、パラメータクラスの名前を取らなければならない
Exception in thread "main" java.lang.NoSuchMethodException: java.util.ArrayList.<init>(java.lang.Integer)
を得るがありますユーザーからの入力ですので、私は直接int.class
を書くことはできません。
私は既にClass.forName()
とClassname.class
の違いについて検索しましたが、thisのような回答は同じだと結論づけています。 私はArrayList
コンストラクタのパラメータとしてClass.forName()
オブジェクトを渡すことができない理由を知りたいだけです。int.class
を書き込むと、どのように動作しますか? Class.forName()
が正しい方法でない場合、クラス名のオブジェクトをユーザーから入力として取得するにはどうすればよいですか?
まあ、限られた数のプリミティブ型があります。私があなただったら、マップを作成してプリミティブ型の名前をキーとして使用し、対応する 'Class'オブジェクトを値として使用します。 – Sweeper
@スウィーパーあなたは正しいです。これで問題は解決しますが、なぜこの目的でClass.fornameを使用できないのでしょうか? – Ahsan
私は分かりません。 'java.lang.Integer'クラス名をこのコードにハードコードしました。ユーザー入力はどこに入力されますか?または 'Class.forName()'?ここで 'Class.forName()'に間違っているのは、あなたが指定したパラメータだけです。あなたが何を求めているのか不明です。 – EJP