使用反射在构造函数中使用参数创建对象

时间:2012-09-12 07:47:07

标签: java reflection constructor

我无法理解以下代码:

Constructor<T>[] constructors = (Constructor<T>[]) clazz.getConstructors();  
for(int i = 0; i < constructors.length; i++){  
  Constructor<T> constructor = constructors[i];    
  if (constructor.getParameterTypes().length>0){    
    T instanceObject = constructor.newInstance(new Object[constructor.getParameterTypes().length]);  
        break;  
  }  

}    

为了清楚起见,省略了try/catch和其他内容 我无法理解这是如何运作的:T instanceObject = constructor.newInstance(new Object[constructor.getParameterTypes().length]);
它调用一个具有参数的构造函数,但作为参数传递Object
这是如何运作的?传递Object独立于实际的形式参数?

2 个答案:

答案 0 :(得分:1)

它尝试传递全部为null的虚拟参数。这可以给你一个对象,但这并不意味着它将是一个有用的。 ;)

我不确定为什么它会跳过零长度构造函数,因为这是一个你可能无法成功传递参数的构造函数。

答案 1 :(得分:1)

一个对象数组,其元素数等于构造函数中的参数数量,因此:

new Object[constructor.getParameterTypes().length])
相关问题