Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

PlantUML Macro
interface "Iterable<T>" as iterable {
	Iterator<T> iterator()
}
interface "Collection<T>" as collection
interface "List<T>" as list
class "ArrayList<T>" as arraylist
class "LinkedList<T>" as linkedlist

iterable <|-right-- collection
collection <|-right-- list
list <|.down. arraylist
list <|.down. linkedlist

...

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.

"Iterable<T>" Library
Klasse som bruker ArrayListKlasse som også implementerer IterableKlassediagramfor-each-løkke
Code Block
languagejava
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
languagejava
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<Book> as iterable {
	Iterator<T> iterator()
}
class Library
class Book

iterable <|.. Library
Library "1" *.right..
 "n" Book: books 
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
	...
}

...