0

クラスのセットがあります:TestClass1、、。これらのクラスはすべて、クラスから継承します。クラス、およびさまざまなコンストラクターがあります。例えば:TestClass2TestClass3MainTestClassTestClass1TestClass2TestClass3

TestClass1(String s)
TestClass2(Integer i)
TestClass3(Double d)

クラスは複数のコンストラクターを持つことができます-それぞれが他とは異なります。

次に、これらのクラスのインスタンスをランダムに作成して、リストに保存します。そのために、...を使用して、...Classのオブジェクトをリストに格納します。次に、たとえば、ゼロ以外のパラメーター数を持つ各クラスの最初のコンストラクターを取得します。さて、メソッドを使ってオブジェクトを作成したいとき、この特定のコンストラクターに渡す引数のタイプと数がわかりません。TestClass1TestClass1.classnewInstance()

リフレクションを使ってこのようなことを達成することは可能ですか?私は次のようなことを考えてきました

setConstructorArgument(int number, Object value)

また

setConstructorArguments(Object[] arguments)

同様のメソッドがJavaに存在しますか?

4

1 に答える 1

3

コンストラクターオブジェクトには、それが属するクラスを構築するための引数を取ることができるnewInstanceメソッドがあります。明らかに、引数は、getParameterTypesメソッドがそれらを提供できると予想されるパラメーターと一致する必要があります。

Object ... initargsは、構文を許可することを除いて、実際にはObject[]initargsを意味します

newInstance(param1, param2, param3);

と同様

newInstance(new Object[]{param1, param2, param3});

また、次のことを覚えておく必要があります

newInstance(null);

という意味ではない

newInstance(new Object[]{null});

時々人々を捕まえる。

個人的にはvarargsは好きではありませんが、c'estlavieです。

于 2013-03-25T01:03:33.760 に答える