In Java, la maggior parte delle persone si aspetta che ogni chiamata a Iterator.next()
restituisca un oggetto distinto. Ciò ha portato alcuni di noi a definire un modello alternativo che abbiamo chiamato un "cursore". (Si noti che altri usano il termine "cursore" per tracciare una distinzione diversa). Il modello di un cursore è:
class SomeCursor {
boolean hasNext();
void next();
type1 getItem1();
type2 getItem2();
}
In altre parole, è perfettamente chiaro che lo stesso oggetto si evolve in ogni fase dell'iterazione.
Il problema alla mano in questo momento è anche quello di supportare situazioni, come i servizi web, in cui vogliamo assolutamente oggetti distinti, in modo che possiamo spedire loro una collezione.
Mi fa pena immaginare coppie di classi (un cursore e un fagiolo) che devono essere mantenute in parallelo, e io sto cercando alternative.
Ecco un'idea, e mi chiedo se qualcun altro là fuori ne abbia visto uno migliore.
- Crei un'interfaccia costituita dai metodi 'ottieni' per un oggetto con tutti gli elementi in essa contenuti.
- Si definisce il cursore come implementante quell'interfaccia e inoltre haNext & successiva.
- Create dinamicamente gli oggetti bean usando al volo una delle principali librerie di code-gen dinamiche per creare una classe con i campi ovvi e ottenere metodi, oltre a metodi set, se necessario, per rendere felice qualcosa come JAX-B.
modifica: per coloro che non stanno seguendo, raccomando una lettura di link . Confronta anche con link , che è un esempio di questo 'cursore' approccio.
Nota in Lucene un'API che itera su una sequenza di oggetti, consente al chiamante di specificare se consegnare i nuovi dati a un nuovo oggetto o allo stesso vecchio oggetto ogni volta.
Sì, è possibile definire un Iterator<T>
che restituisca la stessa cosa in qualsiasi momento, ma siamo preoccupati che le persone lo usino come arma per sparare le dita dei piedi. Quindi la preferenza per il modello JDBC-ish.