获取对象的类及其构造函数,Android中的Reflection

时间:2012-04-18 05:34:58

标签: java android class object reflection

假设我有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方法,并且该对象的类型未知,这意味着任何类都可以传递其对象。

感谢。

2 个答案:

答案 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);
}

Constructor with parameters

答案 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()方法总是使用默认构造函数。

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