0

classA と classB(generic) があるとします。http://www.exampledepot.com/egs/java.lang.reflect/Constructors.htmlを参照してください。

classA から classB に customobject を渡していますが、今は classB で customobject のコンストラクターが必要で、それを呼び出しています

クラスA

customclass objCustomclass;

classB mClassB;

mClassB.getConstructorAndCall(objCustomclass);

クラスB

public void getConstructorAndCall(Object objCustomclass);

try {
    Object filledObject = objCustomclass.getClass().newInstance();
        // here i need to call  filledObject's contructor
} catch (Exception e) { }

カスタムオブジェクトのインスタンスとしてオブジェクトを作成できますが、コンストラクターはどうですか。

注:getConstructorAndCall()は一般的なメソッドであり、そのオブジェクトは不明な型であり、どのクラスもそのオブジェクトを渡すことができることを意味します。

ありがとう。

4

2 に答える 2

1

コンストラクターが空の場合は、コンストラクターを実行する必要があると思います。関数にパラメーターを渡すなど、より複雑なことはすべて、次の方法で実行できます。

Constructor[] constructors = objCustomClass.getClass().getConstructors()
for (int i = 0; i < constructors.length; i++) {
  Constructor c = constructors[i];
  Class[] paramTypes = c.getParameterTypes();
  Object[] params;
  // do fancy stuff here - it helps if you know what the constructors take beforehand
  Object filledObject = c.newInstance(params);
}

パラメータを持つコンストラクタ

于 2012-04-18T05:44:16.730 に答える
0

java.lang.Class の JavaDoc から ( http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html#newInstance () ):

この Class オブジェクトによって表されるクラスの新しいインスタンスを作成します。クラスは、空の引数リストを持つ新しい式によってインスタンス化されます。クラスがまだ初期化されていない場合は、クラスが初期化されます。

つまり、 newInstance() メソッドは常にデフォルトのコンストラクターを使用します。

ほとんどの場合、新しいインスタンスを使用し、特定のコンストラクターまたは署名を必要とする人々を目にしますが、それはたまたまソリューション設計の欠如が原因です。必要なソリューションにパターンが当てはまるかどうかを再確認することをお勧めします。

于 2012-04-18T05:42:25.657 に答える