在这个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[]{}
如何实现此目标?
为什么数组概念[]
只涉及一个对象?
这里的{}
语法是什么?为什么不()
?
答案 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
需要一组参数。这就是为什么它就是这样做的。