代码之家  ›  专栏  ›  技术社区  ›  Jim

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

  •  1
  • Jim  · 技术社区  · 13 年前

    我无法理解以下代码:

    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 ?
    这是怎么回事?通过 对象 独立于实际的形式参数?

    2 回复  |  直到 13 年前
        1
  •  1
  •   Peter Lawrey    13 年前

    它试图传递伪参数 null 。这可以给你一个Object,但并不意味着它会是一个有用的Object。;)

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

        2
  •  1
  •   Boris Pavlović    13 年前

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

    new Object[constructor.getParameterTypes().length])