2011-11-18 42 views
5

Tôi rất bối rối về trình lặp trong Java.Khai báo một trình lặp trong Java

Các hướng dẫn được đang đọc nói điều này:

Trong ngôn ngữ lập trình Java, một giao diện là một loại tài liệu tham khảo, tương tự như một lớp, mà có thể chỉ chứa các hằng số, chữ ký phương pháp, và các loại lồng nhau. Không có cơ quan phương pháp. Giao diện không thể được khởi tạo - chúng chỉ có thể được thực hiện bởi các lớp hoặc được mở rộng bởi các giao diện khác. Phần mở rộng sẽ được thảo luận sau trong bài học này.

Sau đó, tôi nhìn thấy một hướng dẫn với điều này:

Iterator<String> flavoursIter = aFlavours.iterator(); 

Tôi hiểu rằng aFlavours đã inheritated chức năng lặp mà trả về giao diện iterator. Tôi chỉ không hiểu những gì đang thực sự xảy ra trong dòng này. Tôi nghĩ bạn không thể khởi tạo?

Có thể tôi không có ý nghĩa, nhưng hãy cho tôi biết chúng tôi sẽ không theo dõi.

+2

Nó chỉ trả về việc triển khai cụ thể giao diện đó. Xem thêm http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html – BalusC

Trả lời

7

Bằng cách nói rằng nó không thể được instantiated, những gì họ có nghĩa là bạn không thể làm Iterator i = new Iterator();. Vì Iterator là một giao diện, nó không tự thực hiện. Khi bạn làm

Iterator flavoursIter = aFlavours.iterator(); 

gì bạn đang làm là gọi một phương pháp gọi là "lặp" trên đối tượng aFlavours trả về một thể hiện của một số lớp mà thực hiện giao diện Iterator (bạn không thực sự biết những gì lớp nó chính xác là, bạn cũng không nên quan tâm, tất cả những gì bạn được bảo đảm là nó hỗ trợ tất cả các phương thức được định nghĩa trong giao diện Iterator).

+0

Chà, tôi thậm chí còn không nghĩ về nó theo cách này. Cảm ơn rất nhiều! –

0

Bạn không thể tạo đối tượng Iterator nhưng bạn có thể tạo đối tượng triển khai giao diện Iterator. Sử dụng Iterator flavoursIter có nghĩa là bạn không quan tâm triển khai thực hiện nào.

0

Bạn chính xác. Iteratorinterface và do đó, nó không thể được khởi tạo trực tiếp. Tuy nhiên, bạn có thể tạo và khởi tạo việc triển khai lớp Iterator.

Về cơ bản các lớp học có phương thức iterator() đã viết triển khai riêng của mình về giao diện Iterator. iterator() instantiates và trả về việc triển khai Iterator.

1

Là một bổ sung cho các câu trả lời khác:

Nhiều lớp thực hiện giao diện như Iterator như một lớp bên tư nhân, sau đó trở về trường hợp của lớp ẩn bất cứ khi nào một thể hiện được yêu cầu. Bạn có thể đọc mã nguồn của khung công tác Bộ sưu tập nếu bạn muốn có một ví dụ.

Ưu điểm chính của việc thực hiện theo cách này là bạn ẩn chi tiết triển khai. Ví dụ: người dùng ví dụ List không cần phải biết lớp bê tông nào được trả về khi gọi someList.iterator(), cũng không cần biết có bao nhiêu triển khai khác nhau của Iteraor có sẵn trong khung Bộ sưu tập. Điều này cho phép những kẻ phá hủy khung công tác này tạo ra nhiều triển khai khi cần thiết, dựa trên nhu cầu của họ (tính đồng nhất, hiệu quả, v.v.), và bạn, với tư cách là người dùng khung, không phải học hàng tỷ lớp.

0

Kick, Khi chúng ta gọi là phương pháp lặp(). Nó sẽ trả về một thể hiện của ví dụ Iterator.for

public Iterator iterator() { 
    return new ArryListIterator implments Iterator { 
     public T next() { // code for next() } 
     public boolean hasNext() {//code for hashNext()} 
     //others codes 

     } 

}

nên .whether bạn biết những gì xảy ra khi chúng tôi gọi nó.

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