2011-01-31 4 views
2

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) 
+1

わからない人にもエラー/スタックトレースを貼り付けることができますか? – sinelaw

+0

Class.forNameに静的インポートを持たない限り、コードはコンパイルされません。 (コードを実行しようとする人のために) – Erik

+0

はい、申し訳ありませんが、上記を追加します – warrd

答えて

4

java.lang.Integerは、引数としてNumberを取るコンストラクタを持っていません。

あなたが得たstacktraceを読んでいれば(おそらくやや曖昧なやり方で、情報はそこにあるかもしれません)。あなたはそれについて質問があるときに少なくともスタックトレースを投稿する必要があります。

+0

OK、表示されます。入力をプリミティブなintとみなして、そのメソッドに与えるべきことは何ですか? – warrd

+0

クラス名をクリックして、JavaDocをリンクしました。 'Integer'に対してどのコンストラクタが存在するかを調べます。それらの1つを使用してください。 –

+0

int.classが有効な構文であることを認識しませんでした。とにかく、ありがとう、非常に役立つ – warrd

関連する問題