句法`new Class [] {}`如何工作?

时间:2011-07-02 21:07:43

标签: java reflection

在这个beginners guide to Dependency Injection的第一个代码示例中,我遇到了一些我不确定我完全理解的新结构:

 // Instantiate CabAgency, and satisfy its dependency on an airlineagency.

 Constructor constructor = cabAgencyClass.getConstructor
  (new Class[]{AirlineAgency.class});
 cabAgency = (CabAgency) constructor.newInstance
  (new Object[]{airlineAgency});

new Class[]{AirlineAgency.class}实际上意味着什么?

我了解其目标是为Constructor创建AirlineAgency.class实例,但语法new Class[]{}如何实现此目标?

为什么数组概念[]只涉及一个对象?

这里的{}语法是什么?为什么不()

1 个答案:

答案 0 :(得分:7)

new Class[] { AirlineAgency.Class }创建Class个对象的单元素数组,并将唯一的元素初始化为AirlineAgency.class。它类似于new int[] { 42 }

代码基本上等同于:

Class[] parameterTypes = new Class[1];
parameterTypes[0] = AirlineAgency.class;

Constructor constructor = cabAgencyClass.getConstructor(parameterTypes);

Object[] arguments = new Object[1];
arguments[0] = airlineAgency;

cabAgency = (CabAgency)constructor.newInstance(arguments);

Class.getConstructor方法需要构造函数的参数类型数组(以找到要使用的正确重载),类似地Constructor.newInstance需要一组参数。这就是为什么它就是这样做的。