web-dev-qa-db-ja.com

Javaコレクション(Java.util))のパッケージ構造-IterableがJava.langにあるのはなぜですか?

以下の図のように、インターフェイスIterableを除いて、残りのすべての構成要素(インターフェイス/クラス/抽象クラス)は同じパッケージJava.util

enter image description here

IterableはなぜJava.langパッケージ?

注:Javaプログラミング)のパッケージ化の側面を理解することを目的としています。

12
overexchange

javadoc で説明されているように、Iterableの目的は特定の言語構文をサポートすることです

このインターフェイスを実装すると、オブジェクトを「foreach」ステートメントのターゲットにすることができます

そのため、それは lang package に属し、

Javaプログラミング言語の設計の基礎となるクラスを提供します。


図の他のクラス[〜#〜] jcf [〜#〜]に属しているため、- til package which

コレクションフレームワークが含まれています...

22
gnat

多くのものがインターフェイス Iterable を実装するか、サブインターフェイスとして拡張するためです。

実装クラスは次のとおりです。

  • Java.util
    • AbstractCollection
    • AbstractList
    • AbstractQueue
    • AbstractSequentialList
    • AbstractSet
    • ...
    • 同時
      • ArrayBlockingQueue
      • ConcurrentLinkedDeque
      • ...
  • Java.beancontext
    • BeanContextServicesSupport
    • BeanContextSupport
    • ...
  • Java.sql
    • BatchUpdateException
    • DataTruncation
    • ...
  • javax.management
    • AttributeList
  • javax.print.attribute.standard
    • JobStateReasons
    • ...
  • ...

これは膨大なリストです。そして、そこにあるあらゆる種類のパッケージに触れています。

さらに、 パッケージの循環依存関係 を最小限に抑える必要があります。パッケージAのクラスがパッケージAのクラスに依存するパッケージBのクラスに依存している場合、循環依存関係があります。それらが存在することは必ずしも悪いことではありませんが、他の循環依存関係につながり、それが悪いことになる場合があります。それ自体は悪くありませんが、2つのクラスまたはパッケージ間の結合が強すぎることを示すのは、デザインのにおいです。技術債務の積み上げの始まりです。

これに対する解決策は、「はい、Iterableインターフェースは、Javaとjavax構造の全体にわたって、さまざまなクラスとパッケージに依存しているものです。それは言語ライブラリの最も基本的なもの-Java.lang。」

そして、それはあなたがそれを見つける場所です。

関連読書:

6
user40980