假设我有classA和classB(通用),引用http://www.exampledepot.com/egs/java.lang.reflect/Constructors.html
我将一个customobject从classA传递给classB,现在我想在classB中使用customobject的构造函数并调用它
CLASSA
customclass objCustomclass;
classB mClassB;
mClassB.getConstructorAndCall(objCustomclass);
CLASSB
public void getConstructorAndCall(Object objCustomclass);
try {
Object filledObject = objCustomclass.getClass().newInstance();
// here i need to call filledObject's contructor
} catch (Exception e) { }
我能够创建对象作为自定义对象的实例,但是构造函数呢。
注意:getConstructorAndCall()
是一个commom方法,并且该对象的类型未知,这意味着任何类都可以传递其对象。
感谢。
答案 0 :(得分: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);
}
答案 1 :(得分:0)
来自JavaDoc for java.lang.Class(http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html#newInstance()):
创建此Class对象表示的类的新实例。 该类通过带有空的新表达式进行实例化 参数列表。如果尚未进行,则初始化该类 初始化。
予。 E. newInstance()方法总是使用默认构造函数。
大多数时候,我看到人们使用新实例并需要特定的构造函数或签名,这恰好是由于缺乏解决方案设计。您可能需要仔细检查模式是否适用于您需要的解决方案。