0

假设我有 classA 和 classB(generic),参考http://www.exampledepot.com/egs/java.lang.reflect/Constructors.html

我将一个自定义对象从classA传递给classB,现在我想要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 对象表示的类的新实例。该类被实例化为一个带有参数列表的表达式。如果尚未初始化该类,则将其初始化。

IE newInstance() 方法总是使用默认构造函数。

大多数时候,我看到人们使用新实例并需要特定的构造函数或签名,这恰好是由于缺乏解决方案设计。您可能需要仔细检查某个模式是否适用于您需要的解决方案。

于 2012-04-18T05:42:25.657 回答