Poiché molte cose implementano l'interfaccia Iterable o estendono è come interfaccia secondaria.
Le classi di implementazione sono:
- java.util
- AbstractCollection
- AbstractList
- AbstractQueue
- AbstractSequentialList
- AbstractSet
- ...
- concomitante
- ArrayBlockingQueue
- ConcurrentLinkedDeque
- ...
- java.beancontext
- BeanContextServicesSupport
- BeanContextSupport
- ...
- java.sql
- BatchUpdateException
- DataTruncation
- ...
- javax.management
- javax.print.attribute.standard
- ...
Questa è una lista enorme. E tocca tutti i tipi di pacchetti là fuori.
Inoltre, si desidera ridurre al minimo le dipendenze dei pacchetti circolari . Se una classe nel pacchetto A dipende da una classe del pacchetto B che dipende da una classe nel pacchetto A, hai una dipendenza circolare. Non sono sempre cattivi che esistono - ma portano ad altre dipendenze circolari e questo può essere una cosa negativa. Non è male di per sé, ma è un odore di design che indica che l'accoppiamento tra due classi o pacchetti è troppo stretto. È l'inizio dell'accumulazione del debito tecnico.
La soluzione a questo è dire "sì, l'interfaccia Iterable è una cosa che dipende da un'ampia varietà di classi e pacchetti in tutta la struttura java e javax. Dovrebbe trovarsi nella maggior parte della base della lingua librerie - java.lang. "
Ed è qui che lo troverai.
Lettura correlata: