オブジェクトのコンストラクタのシグネチャである文字列を外部ソースから受け取ります。クラス名とパラメータが含まれています。例えばJavaリフレクションを使用してオブジェクトを作成する
:
public class Foo {
public Foo(int x, int y, int z) {
// do something
}
}
public class Bar {
public Bar (int x, boolean bool) {
// do something
}
}
のは、私はこのような多くのクラスを持っている、と私は私が受け取る文字列(つまり、クラス名と偶然にが含まれている)に基づいて、これらのクラスからオブジェクトを作成したいとしましょう。これはできますか?
私はこのようなものを使用してクラスを取得することができます知っている:
String className = "myClass";
Class<?> myClass = Class.forName(className);
//Constructor<?> ctor = myClass.getConstructor();
//Object object = ctor.newInstance(new Object[] { ctorArgument });
しかし、私はコンストラクターがありますどのように多くの偶然に、コンパイル時に、どの種類のわからない場合はどのように私はオブジェクトをインスタンス化することができますかれらは〜だろう?ところで、私がオブジェクトを作成したいクラスは、たぶん1つのコンストラクタしか利用できません。しかし、各クラスは、他のクラスと比較して異なるコンストラクタを持つ可能性があります。
あなたはその後、取得するためにリフレクションを使用することができます:例 - その後
convertStringToActualType()
はそれが 'Boolean.valueOf(argStr)」などのブールフィールドの場合、たとえば...実際のパラメータに文字列値を変換する方法を知っている必要がありますコンストラクタの引数の数と型。しかし、ある時点で、渡す値を決定する必要があります。 –渡したい値は、受け取ったStringから解析されます。次のようになります。 "Foo(4,5,7 ) "または" Bar(1、true) "を選択します。 – Johnny