"MyClass"と言うクラス名を知っていて、Class
オブジェクトを取得したい、つまりMyClass.class将来の参照用。それを行う方法はありますか?
私はウェブを調べましたが、それに関連して見つけたほとんどのことはClassLoader
に関するものでした。クラスを初期化するのではなく、将来の使用のためにクラスオブジェクトを取得するだけです。
編集:これに対する最初の答えについて:
私はすでにforName()
メソッドをチェックしましたが、クラスを初期化することになっていると思いました。これで、完全な引数で呼び出してfalse
を2番目の引数に渡すことができますが、3番目はnull
である必要がありますか?
でしょうか
Class.forName("MyClass", false, null);
return MyClass.class
?
実際、私がやりたいことは、Class
オブジェクトに関連付けられた文字列IDの配列を、クラスオブジェクトが自動的にフェッチされるIDの配列に置き換えて、手作業を取り除くことです:)
迅速な回答をありがとう、これについて言及していないことを申し訳ありません。
次を使用できます。
Class c = Class.forName("com.package.MyClass");
そして、後でオブジェクトをインスタンス化します:
Object obj = c.newInstance();
編集:これは最も単純な使用例です。コメントに示されているように、初期化プロセスによってスローされるコンストラクター引数と例外を考慮する必要があります。 newInstance
のJavaDocs にはすべての詳細が含まれています。
Class.forName("MyClass")
詳しくは JavaDoc を読んでください
Class
class の静的な forName
method を使用できるかもしれません。
また、上記の提案は正しいが、デフォルトの(パラメーターのない)コンストラクターでのみ機能することに注意してください。次のようなこともできます:
public Object newInstance(String className, Object...args) throws Exception {
Class<?> clazz = Class.forName(className);
if(args == null || args.length == 0) {
return clazz.newInstance();
}
List<Class<?>> argTypes = new ArrayList<Class<?>>();
for(Object object : args) {
argTypes.add(object.getClass());
}
Constructor<?> explicitConstructor = clazz.getConstructor(argTypes.toArray(new Class[argTypes.size()]));
return explicitConstructor.newInstance(args);
}