Потому что многие вещи реализуют интерфейс Iterable или расширяют его как подчиненный интерфейс.
Классы реализации:
- java.util
- AbstractCollection
- AbstractList
- AbstractQueue
- AbstractSequentialList
- AbstractSet
- ...
- параллельный
- ArrayBlockingQueue
- ConcurrentLinkedDeque
- ...
- java.beancontext
- BeanContextServicesSupport
- BeanContextSupport
- ...
- java.sql
- BatchUpdateException
- DataTruncation
- ...
- javax.management
- javax.print.attribute.standard
- ...
Это огромный список. И это касается всех видов пакетов там.
Кроме того, вы хотите минимизировать циклические зависимости пакетов . Если класс в пакете A зависит от класса в пакете B, который зависит от класса в пакете A, у вас есть циклическая зависимость. Они не всегда плохи тем, что существуют, но они приводят к другим круговым зависимостям, и это может быть плохо. Само по себе это неплохо, но это запах конструкции, который указывает на то, что связь между двумя классами или пакетами слишком тесная. Это начало накопления технического долга.
Решение этой проблемы заключается в том, чтобы сказать: «Да, интерфейс Iterable - это то, от чего зависят самые разные классы и пакеты во всей структуре java и javax. Он должен быть в самой базовой языковой библиотеке - java. .lang «.
И вот где вы найдете это.
Связанное чтение: