2010-01-18 32 views
15

Tại sao có phương thức iterator() được định nghĩa trên giao diện java.util.Collection khi nó đã mở rộng java.util.Iterable mà phương thức này đã được định nghĩa.Tại sao có một trình lặp phương thức() trên java.util.Collection

Tôi đang suy nghĩ một số loại tương thích ngược hoặc một cơ hội để viết một số JavaDoc trên phương thức ở cấp thu thập.

Bất kỳ ý tưởng nào khác?

+0

bắt đẹp, tôi thứ hai so sánh điều ngược lại, không chắc chắn mặc dù – medopal

+0

Có một câu hỏi SO tương tự (google fu của tôi thiếu) đối phó với 'Set' vs' Collection' có cùng khai báo phương thức và chúng đã được giới thiệu trong cùng một phiên bản (1.2). –

Trả lời

3

Tôi đã thực hiện một số điều tra thêm về điều này và thấy rằng các phương thức equals() và hashcode() cũng bị ghi đè.

Rõ ràng lý do duy nhất cho việc này có thể là thêm javadoc - có thể đây là lý do tại sao trình lặp() cũng bị ghi đè.

9

Tính tương thích ngược. Iterable không được giới thiệu cho đến 1.5 với cấu trúc for (Object o: iterable). Trước đây, tất cả các bộ sưu tập phải cung cấp một phương tiện để lặp lại chúng.

+0

trình lặp() không chỉ tồn tại cho khả năng tương thích ngược; Nó thường hữu ích để có một xử lý trực tiếp với Iterator. – Adamski

+1

@Adamski, Dan hỏi tại sao phương thức được khai báo cả trên Bộ sưu tập và Lặp lại, khi Bộ sưu tập mở rộng Iterable. Điểm của bạn dường như đang giải quyết "tại sao có một phương thức .iterator(), dấu chấm?" mà không ai hỏi. –

+0

Vâng - xin lỗi; Tôi nhận ra điều đó và vứt bỏ câu trả lời của tôi! – Adamski

6

Tôi nghi ngờ nó chỉ là để tránh sự xuất hiện của loại bỏ một phương pháp từ một điểm tài liệu của xem. Mặc dù javadoc là tốt đẹp nó sẽ rất khó để nhận thấy/appreicate một phương pháp đang được chuyển từ một giao diện đến một siêu giao diện.

Lưu ý điều tương tự đã được thực hiện với Có thể đóng được, cũng được giới thiệu trong 1.5.

Theo như tôi biết, sẽ không có vấn đề tương thích nhị phân nào với việc xóa phương thức khỏi lớp Bộ sưu tập.

+0

Thật vậy, không có bất kỳ vấn đề tương thích nguồn nào. (Giao diện 'Bộ sưu tập', btw). Tôi tin rằng bạn sẽ cần một cơ sở siêu ngôn ngữ, chẳng hạn như phản ánh, để nói sự khác biệt trong thời gian chạy. –

3

Iterable được giới thiệu trong 1.5. Vì nó là một phần của Bộ sưu tập từ trước 1.5 nên có thể họ đã không xóa nó. Và như người đóng góp khác đã chỉ ra, nó có JavaDoc tốt hơn.

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