クラス名を使用してインスタンスを作成し、コンストラクタを呼び出す 質問する

クラス名を使用してインスタンスを作成し、コンストラクタを呼び出す 質問する

クラス名 (動的) を指定して特定のクラスのインスタンスを作成し、そのコンストラクターにパラメーターを渡す方法はありますか。

何かのようなもの:

Object object = createInstance("mypackage.MyClass","MyAttributeValue");

"MyAttributeValue"は のコンストラクタへの引数ですMyClass

ベストアンサー1

はい、次のようなものです:

Class<?> clazz = Class.forName(className);
Constructor<?> ctor = clazz.getConstructor(String.class);
Object object = ctor.newInstance(new Object[] { ctorArgument });

もちろん、これは単一の文字列パラメータに対してのみ機能しますが、非常に簡単に変更できます。

クラス名は完全修飾名、つまり名前空間を含む必要があることに注意してください。ネストされたクラスの場合は、ドル記号を使用する必要があります (コンパイラが使用する記号であるため)。例:

package foo;

public class Outer
{
    public static class Nested {}
}

そのためのオブジェクトを取得するにはClass、 が必要ですClass.forName("foo.Outer$Nested")

おすすめ記事