※ ChatGPTを利用し、要約された質問です(原文:コンストラクターの生成でエラーが出ます。)
リフレクションを使ってDoubleのコンストラクターを呼び出すプログラムでエラーが出る
このQ&Aのポイント
リフレクションを使ってDoubleのコンストラクターを呼び出すプログラムでエラーが発生しています。NoSuchMethodExceptionがスローされ、Doubleクラスに引数がDouble型のコンストラクターが存在しないことが原因です。
原因の一つは、createInstanceメソッドで引数の型を取得する処理が間違っていることです。引数の型を取得する際、引数のオブジェクトのgetClass()メソッドを使用する必要がありますが、現在は引数のオブジェクト自体のクラスを取得しています。
解決策としては、createInstanceメソッドで引数の型を正しく取得するよう修正する必要があります。引数のオブジェクトの型を取得し、それを使用してコンストラクターを取得することで、正しいインスタンスが生成されるようになります。
こんにちは、site7(tokopokoからIDを変えました)と言います。
リフレクションを使って、
Double(doulbe)のコンストラクターを呼び出すプログラムを作りました。
しかし、実行するとエラーになります。
原因または解決策をご存知の方はいらっしゃいませんか。
■プログラム
import java.lang.reflect.*;
class TestConstructor {
public static Class<?> type;
public static void main(String[] args) {
try {
type = Class.forName("java.lang.Double");
Double d = (Double)TestConstructor.createInstance(3.0);
System.out.println(d.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
public static Object createInstance(Object... args)
throws NoSuchMethodException, InstantiationException,
IllegalAccessException, InvocationTargetException {
Class<?>[] parameterTypes = new Class<?>[args.length];
for (int i = 0; i < args.length; i++) {
parameterTypes[i] = args[i].getClass();
}
Constructor<?> constructor = type.getConstructor(parameterTypes);
//Constructor<?> constructor = type.getConstructor(double.class);
return constructor.newInstance(args);
}
}
■実行例
D:\>javac TestConstructor.java
D:\>java TestConstructor
java.lang.NoSuchMethodException: java.lang.Double.<init>(java.lang.Double)
at java.lang.Class.getConstructor0(Class.java:2706)
at java.lang.Class.getConstructor(Class.java:1657)
at TestConstructor.createInstance(TestConstructor.java:21)
at TestConstructor.main(TestConstructor.java:7)
■私の環境は以下の通りです。
OS: Microsoft Windows XP Professional SP2
java: java version "1.6.0_03"
お礼
ありがとうございます。