Porque muchas cosas implementan la interfaz Iterable o la extienden como una subinterfaz.
Las clases de implementación son:
- java.util
- ResumenColección
- AbstractList
- AbstractQueue
- AbstractSequentialList
- AbstractSet
- ...
- concurrente
- ArrayBlockingQueue
- ConcurrentLinkedDeque
- ...
- java.beancontext
- BeanContextServicesSupport
- BeanContextSupport
- ...
- java.sql
- BatchUpdateException
- Truncamiento de datos
- ...
- javax.management
- javax.print.attribute.standard
- ...
Esta es una lista enorme. Y toca todo tipo de paquetes por ahí.
Además, desea minimizar las dependencias de paquetes circulares . Si una clase en el paquete A depende de una clase en el paquete B que depende de una clase en el paquete A, tiene una dependencia circular. No siempre son malos que existan, pero conducen a otras dependencias circulares y eso puede ser algo malo. No es malo en sí mismo, pero es un olor de diseño que indica que el acoplamiento entre dos clases o paquetes es demasiado fuerte. Es el comienzo de la acumulación de deuda técnica.
La solución a esto es decir "sí, la interfaz Iterable es algo de lo que depende una amplia variedad de clases y paquetes en toda la estructura java y javax. Debería estar en la mayoría de las bibliotecas de idiomas: java .lang ".
Y ahí es donde lo encontrarás.
Lectura relacionada: