...
- boolean hasNext() - returnerer true hvis det er flere elementer igjen av sekvensen av elementer og false ellers. Denne metoden kan kalles mange ganger uten at det endrer hvor langt en er kommet.
- <type> next() - returnerer neste element i sekvensen og tar implisitt et steg videre. Returtypen er typen som Iterator-implementasjonen er spesialisert til. Denne metoden kan bør bare kalles dersom hasNext() returnerer true, hvis den kalles når hasNext() returnerer false vil den utløse NoSuchElementException.
- void remove() - fjerner det siste elementet som ble returnert av next() fra den underliggende data-kilden, dersom den støtter dette. Denne metoden er frivillig å implementere, og dersom den ikke er støttet så skal den utløse UnsupportedOperationException.
...
Siden Iterable er et vanlig grensesnitt, så kan våre egne klasser utvide den og utnytte den kompakte for-each-syntaksen. Anta f.eks. at en har en Library-klasse, som bruker en ArrayList til å holde Book-objekter. Kode for en slik klasse er vist under til venstre. Dersom denne klassen også implementerer Iterable<Book> så kan en bruke for-each-løkka for å gå gjennom Book-objektene i et Library-objekt. Koden og klassediagram for denne utvidete Library-klassen er vist i midten og for-each-løkka er vist til høyre.
Klasse som bruker ArrayList | Klasse som også implementerer Iterable | Klassediagram | for-each-løkke |
---|
Code Block |
---|
| public class Library {
private Collection<Book> books = new ArrayList<Book>();
public void addBook(Book book) {
books.add(book);
}
public void removeBook(Book book) {
books.remove(book);
}
} |
| Code Block |
---|
| public class Library implements Iterable<Book> {
... books-feltet og add- og remove-metodene her ...
// fra Iterable<Book>
public Iterator<Book> iterator() {
return books.iterator();
}
} |
| PlantUML Macro |
---|
interface " |
| Iterable<T>Iterable<Book>" as iterable {
|
| Iterator<T>Iterator<Book> iterator()
}
class Library
iterable <| |
| -right- |
| Code Block |
---|
// lag en Library-instans
Library library = new Library();
// legg til noen bøker
library.addBook(new Book(...));
library.addBook(new Book(...));
// gå gjennom bøkene
for (Book book : library) {
// gjør noe med book her
...
} |
|
...