Selon le diagramme ci-dessous, à l'exception de l'interface Iterable
, toutes les constructions restantes (interface / classe / classe abstraite) se trouvent dans le même packagejava.util
Pourquoi Iterable
s'asseoir en java.lang
paquet?
Remarque: L'intention est de comprendre l'aspect packaging de la programmation java.
java
api
packages
collections
suréchange
la source
la source
Réponses:
Comme expliqué dans son javadoc , le but de
Iterable
est de supporter une syntaxe de langage particulière :En tant que tel, il appartient au package lang , qui
Les autres classes du diagramme appartiennent à JCF et sont donc dans le package util qui
la source
Iterator
devrait idéalement aussi être dansjava.lang
, depuisIterable
. Bien sûr, il doit l'êtrejava.util
pour des raisons de compatibilité descendante (il avait été introduit dans le JDK bien avant que la construction "foreach" ne lui donne un rôle dans le langage proprement dit).Iterable
onIterator
, lejava.lang
package ne dépend généralement pas des classes enjava.util
.)Parce que beaucoup de choses implémentent l'interface Iterable ou l'étendent comme une sous-interface.
Les classes d'implémentation sont:
Ceci est une énorme liste. Et cela touche toutes sortes de packages.
En outre, vous souhaitez minimiser les dépendances de packages circulaires . Si une classe du package A dépend d'une classe du package B qui dépend d'une classe du package A, vous avez une dépendance circulaire. Ils ne sont pas toujours mauvais lorsqu'ils existent - mais ils conduisent à d'autres dépendances circulaires et cela peut être une mauvaise chose. Ce n'est pas mal en soi, mais c'est une odeur de conception qui indique que le couplage entre deux classes ou packages est trop serré. C'est le début de l'accumulation de dettes techniques.
La solution à cela est de dire "oui, l'interface Iterable est quelque chose qui dépend dans une grande variété de classes et de packages dans l'intégralité de la structure java et javax. Elle devrait se trouver dans la plus base des bibliothèques de langues - java .lang. "
Et c'est là que vous le trouverez.
Lecture connexe:
la source