forName(String)メソッドを使用してクラスの新しいインスタンス(具体的には抽象クラスのサブクラス)を作成しようとしています。例えばクラス名(既知のスーパークラス)を含むStringからオブジェクトをインスタンス化するための正しいメソッド
、私は数のサブクラスたい場合:
import static java.lang.Class.forName;
import java.lang.reflect.Constructor;
Object[] arguments = new Object[] {0};
String classname = "java.lang.Integer";
try {
Class<? extends Number> c = forName(classname).asSubclass(Number.class);
Constructor<? extends Number> constructor = c.getConstructor(Number.class);
Number x = constructor.newInstance(arguments);
}
catch (Exception e) {
e.printStackTrace();
}
は私が間違って何をやっているの?
EDIT:スタックトレース
java.lang.NoSuchMethodException:
java.lang.Integer.<init>(java.lang.Number)
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.getConstructor(Unknown Source)
わからない人にもエラー/スタックトレースを貼り付けることができますか? – sinelaw
Class.forNameに静的インポートを持たない限り、コードはコンパイルされません。 (コードを実行しようとする人のために) – Erik
はい、申し訳ありませんが、上記を追加します – warrd