Porque muitas coisas implementam a interface Iterable ou a estendem como uma sub interface.
As classes de implementação são:
- java.util
- AbstractCollection
- AbstractList
- AbstractQueue
- AbstractSequentialList
- AbstractSet
- ...
- concorrente
- ArrayBlockingQueue
- ConcurrentLinkedDeque
- ...
- java.beancontext
- BeanContextServicesSupport
- BeanContextSupport
- ...
- java.sql
- BatchUpdateException
- DataTruncation
- ...
- javax.management
- javax.print.attribute.standard
- ...
Esta é uma lista enorme. E toca em todos os tipos de pacotes por aí.
Além disso, você deseja minimizar as dependências circulares do pacote . Se uma classe no pacote A depende de uma classe no pacote B, que depende de uma classe no pacote A, você tem uma dependência circular. Nem sempre são ruins porque existem - mas levam a outras dependências circulares e isso pode ser uma coisa ruim. Não é ruim por si só, mas é um cheiro de design que indica que o acoplamento entre duas classes ou pacotes é muito apertado. É o começo da acumulação de dívidas técnicas.
A solução para isso é dizer "sim, a interface Iterable é algo em que é dependente uma grande variedade de classes e pacotes em toda a estrutura java e javax. Ela deve estar na base das bibliotecas de idiomas - java .lang ".
E é aí que você o encontrará.
Leitura relacionada: