web-dev-qa-db-ja.com

Javaのクラス名からクラスオブジェクトを取得する方法

"MyClass"と言うクラス名を知っていて、Classオブジェクトを取得したい、つまりMyClass.class将来の参照用。それを行う方法はありますか?

私はウェブを調べましたが、それに関連して見つけたほとんどのことはClassLoaderに関するものでした。クラスを初期化するのではなく、将来の使用のためにクラスオブジェクトを取得するだけです。

編集:これに対する最初の答えについて:

私はすでにforName()メソッドをチェックしましたが、クラスを初期化することになっていると思いました。これで、完全な引数で呼び出してfalseを2番目の引数に渡すことができますが、3番目はnullである必要がありますか?

でしょうか

Class.forName("MyClass", false, null);

return MyClass.class

実際、私がやりたいことは、Classオブジェクトに関連付けられた文字列IDの配列を、クラスオブジェクトが自動的にフェッチされるIDの配列に置き換えて、手作業を取り除くことです:)

迅速な回答をありがとう、これについて言及していないことを申し訳ありません。

37
alkar

次を使用できます。

Class c = Class.forName("com.package.MyClass");

そして、後でオブジェクトをインスタンス化します:

Object obj = c.newInstance();

編集:これは最も単純な使用例です。コメントに示されているように、初期化プロセスによってスローされるコンストラクター引数と例外を考慮する必要があります。 newInstanceのJavaDocs にはすべての詳細が含まれています。

53
Tony the Pony
Class.forName("MyClass")

詳しくは JavaDoc を読んでください

7
Joachim Sauer

Class class の静的な forName method を使用できるかもしれません。

3
Thomas Owens

また、上記の提案は正しいが、デフォルトの(パラメーターのない)コンストラクターでのみ機能することに注意してください。次のようなこともできます:

    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);
    }
2
Droo