在这个初学者指南依赖注入的第一个代码示例中,我遇到了一些新构造,我不确定我是否完全理解:
// Instantiate CabAgency, and satisfy its dependency on an airlineagency.
Constructor constructor = cabAgencyClass.getConstructor
(new Class[]{AirlineAgency.class});
cabAgency = (CabAgency) constructor.newInstance
(new Object[]{airlineAgency});
Run Code Online (Sandbox Code Playgroud)
什么是new Class[]{AirlineAgency.class}真正的意思是做?
我知道它的目标是创建一个Constructor实例,AirlineAgency.class但语法是如何new Class[]{}实现的呢?
[]当只涉及一个对象时,为什么数组概念?
{}这里的语法是什么?为什么不()呢?
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);
Run Code Online (Sandbox Code Playgroud)
该Class.getConstructor方法需要一个构造函数的参数类型数组(以找到要使用的正确重载),同样需要Constructor.newInstance一个参数数组.这就是为什么这样做的原因.