1. ホーム

[解決済み】クラス名でインスタンスを作成し、コンストラクタを呼び出す場合

2022-04-14 01:55:41

質問

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

のようなものです。

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

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

解決方法は?

はい、そのようなものです。

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") .