回答:
javadocで説明されているように、目的は特定の言語構文Iterable
をサポートすることです。
このインターフェイスを実装すると、オブジェクトを「foreach」ステートメントのターゲットにすることができます
そのため、langパッケージに属します。
Javaプログラミング言語の設計の基礎となるクラスを提供します。
図のその他のクラスはJCFに属しているため、utilパッケージにあります。
コレクションフレームワークが含まれています...
Iterator
理想的にはjava.lang
、にもあるべきだと思いますIterable
。もちろん、java.util
下位互換性の理由である必要があります(「foreach」構文が適切な言語での役割を与えるずっと前にJDKで導入されていました)。
Iterable
on の依存関係は別としてIterator
、java.lang
パッケージは一般的にjava.util
。のクラスに依存しません。)
多くの要素がIterableインターフェイスを実装するか、サブインターフェイスとして拡張するためです。
実装クラスは次のとおりです。
これは膨大なリストです。そして、あらゆる種類のパッケージに触れます。
さらに、循環パッケージの依存関係を最小限に抑える必要があります。パッケージAのクラスがパッケージAのクラスに依存するパッケージBのクラスに依存する場合、循環依存関係があります。それらが存在することは必ずしも悪いわけではありませんが、他の循環依存関係につながり、それは悪いことです。それ自体は悪くはありませんが、2つのクラスまたはパッケージ間の結合が強すぎることを示すデザインの匂いです。技術的な負債の蓄積の始まりです。
これに対する解決策は、「はい、Iterableインターフェースは、javaおよびjavax構造全体のさまざまなクラスおよびパッケージに依存しているものです。言語ライブラリの最もベースにあるべきです-java .lang。」
そして、それはあなたがそれを見つける場所です。
関連資料: