Как работает синтаксис `new Class [] {}`? - PullRequest
6 голосов
/ 03 июля 2011

В первом примере кода этого руководства для начинающих по внедрению зависимостей я столкнулся с некоторыми новыми конструкциями, в которых я не уверен, что полностью понимаю:

 // 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 Ответ

7 голосов
/ 03 июля 2011

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 хочет массив аргументов. Вот почему это так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...