クラス名 (動的) を指定して特定のクラスのインスタンスを作成し、そのコンストラクターにパラメーターを渡す方法はありますか。
何かのようなもの:
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")
。