2012-07-19 5 views

Trả lời

14

Khi khai báo cho người lập bản đồ và giảm lớp như lớp bên trong sang lớp khác, họ phải được khai báo tĩnh sao cho chúng không phụ thuộc vào lớp cha.

Hadoop sử dụng sự phản chiếu để tạo ra một thể hiện của lớp cho mỗi tác vụ bản đồ hoặc giảm chạy. Ví dụ mới được tạo mong đợi một hàm tạo đối số bằng không (nếu không thì nó sẽ biết cái gì để vượt qua).

Bằng cách khai báo trình ánh xạ bên trong hoặc giảm lớp mà không có từ khóa tĩnh, trình biên dịch java thực sự tạo ra một hàm tạo mong đợi một cá thể của lớp cha được truyền vào lúc xây dựng.

Bạn sẽ có thể thấy điều này bằng cách chạy lệnh javap so với tạo classfile

Ngoài ra, từ khóa tĩnh là không hợp lệ khi được sử dụng trong một tuyên bố lớp cha (đó là lý do tại sao bạn không bao giờ nhìn thấy nó ở đầu mức độ, nhưng chỉ trong các lớp học trẻ em)

+0

Cảm ơn. Trên thực tế giải thích của bạn về sự phản ánh giải quyết một số vấn đề khác tôi đã có. – kee

+0

@ Trắng trắng Bạn rất đáng sợ. –

1

tôi có thể nghĩ ra hai lý do:

  1. Khi thực hiện bản đồ giảm phương pháp không một quốc gia là cần thiết mà phải được bảo quản trong các đối tượng. Vì vậy tất cả các thông tin cần thiết được truyền cho phương thức, không cần lưu trữ dữ liệu bổ sung trong đối tượng. Nếu thời gian sống của đối tượng sẽ không vượt quá một cuộc gọi phương thức, tại sao bạn nên đấu tranh sau đó với instantiation?
  2. Không có ý nghĩa gì khi có nhiều hơn một đối tượng, vì lý do tương tự mà bạn sẽ triển khai Singleton Pattern.
+0

Điều này là không chính xác - trong bản đồ giảm, một số trường hợp cụ thể của lớp Mapper được tạo ra; và họ thực sự có thể giữ trạng thái. Tôi đoán ý nghĩa của "tĩnh" là khác nhau trong Java so với ví dụ C#. –