Friday, July 27, 2007

Iterare il non iterabile in Java

Vi è mai capitato di avere un contenitore di oggetti, che però non sia implementato come Collection? A me purtroppo sì.

Abbondanti esempi li si trova nella libreria XOM. In tale libreria, ad esempio, il metodo Element.getChildElements() restituisce un oggetto Elements, che non è una Collection, ma ha semplicemente i metodi get(index) e size().

L'unico modo per iterare sugli elementi in esso contenuti è scrivere qualcosa del genere:

for(int i=0; i < elements.size(); i++) {
Element element = elements.get(i);
}

Dato che non implementa l'interfaccia Iterable, ad esempio, non si può usare il comodo "enhanced for" del JDK 5 per scrivere:

for(Element element: elements) {
// etc...
}

Per superare tale problema ho scritto la classe Iterabletor, che aggiunge ad una qualunque classe l'interfaccia e le capacità di un Iterable. Si può quindi scrivere:

Potete scaricare tutto il codice dal mio sito, nella mini-libreria Utilities.

Maggiori dettagli in questo post nel sito del JUG Padova.

No comments: