Тому що багато речей реалізують інтерфейс Iterable або розширюють його як допоміжний інтерфейс.
Реалізаційні класи:
- java.util
- Анотація колекції
- AbstractList
- Анотація черги
- AbstractSequentialList
- AbstractSet
- ...
- одночасний
- Черга ArrayBlockingQue
- ConcurrentLinkedDeque
- ...
- java.beancontext
- BeanContextServicesSupport
- BeanContextSupport
- ...
- java.sql
- BatchUpdateException
- DataTruncation
- ...
- javax.management
- javax.print.attribute.standard
- ...
Це величезний список. І це стосується всіляких пакетів там.
Крім того, ви хочете мінімізувати кругові залежності пакетів . Якщо клас у пакеті A залежить від класу в пакеті B, який залежить від класу в пакеті A, у вас є кругова залежність. Вони не завжди погані в тому, що вони існують - але вони призводять до інших кругових залежностей, і це може бути погано. Це само по собі не погано, але саме дизайнерський запах вказує на те, що з'єднання між двома класами або пакетами занадто тісне. Це початок накопичення технічної заборгованості.
Рішення цього полягає в тому, щоб сказати "так, інтерфейс Iterable - це те, від чого залежить широке розмаїття класів та пакетів у всій структурі java та javax. Це повинно бути в самій базі мовних бібліотек - java .ланг. "
І саме там ви його знайдете.
Пов'язане читання: