2011-07-02 24 views
5

Trong ví dụ mã đầu tiên của beginners guide to Dependency Injection này tôi gặp phải một số cấu trúc mới trong đó tôi không chắc chắn rằng tôi hoàn toàn hiểu:Cú pháp `new Class [] {}` hoạt động như thế nào?

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

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

không new Class[]{AirlineAgency.class} thực sự có ý nghĩa gì và làm gì?

Tôi hiểu rằng mục tiêu của nó là tạo một cá thể Constructor cho AirlineAgency.class nhưng cú pháp new Class[]{} đạt được điều này như thế nào?

Tại sao khái niệm mảng [] khi chỉ có một đối tượng liên quan?

Cú pháp {} ở đây là gì? Tại sao không phải là ()?

Trả lời

6

new Class[] { AirlineAgency.Class } tạo mảng một phần tử gồm Class đối tượng và khởi tạo thành phần duy nhất là AirlineAgency.class. Nó tương tự như new int[] { 42 }.

Mã này là về cơ bản tương đương như sau:

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); 

Phương pháp Class.getConstructor muốn một mảng các kiểu tham số cho các nhà xây dựng (để tìm ra tình trạng quá tải quyền sử dụng), và tương tự Constructor.newInstance muốn một mảng các đối số. Đó là lý do tại sao nó được thực hiện theo cách đó.

+0

Đó là câu trả lời hay nhất mà tôi có thể mong đợi. Cảm ơn bạn! +1 –

+0

Tên của cấu trúc này là 'khởi tạo mảng ẩn danh'. –

Các vấn đề liên quan