Estructura de empaquetado de colecciones Java (java.util): ¿por qué Iterable se sienta en java.lang?

12

Según el diagrama a continuación, excepto por la interfaz Iterable , todas las construcciones restantes (interfaz / clase / clase abstracta) se encuentran en el mismo paquete java.util

¿Por qué Iterable se encuentra en el paquete java.lang ?

Nota: la intención es comprender el aspecto del paquete de la programación en java.

    
pregunta overexchange 20.06.2015 - 02:19

2 respuestas

22

Como se explica en su javadoc , el propósito de Iterable es admitir una sintaxis de idioma particular :

  

La implementación de esta interfaz permite que un objeto sea el objetivo de la declaración "foreach"

Como tal, pertenece a paquete de idioma , que

  

Proporciona clases que son fundamentales para el diseño del lenguaje de programación Java.

Otras clases en el diagrama pertenecen a JCF y, por lo tanto, se encuentran en paquete util que

  

Contiene el marco de colecciones ...

    
respondido por el gnat 20.06.2015 - 04:17
6

Debido a que muchas cosas implementan la interfaz Iterable o extienda como una interfaz secundaria.

Las clases de implementación son:

  • java.util
    • AbstractCollection
    • AbstractList
    • AbstractQueue
    • AbstractSequentialList
    • AbstractSet
    • ...
    • concurrente
      • ArrayBlockingQueue
      • ConcurrentLinkedDeque
      • ...
  • java.beancontext
    • BeanContextServicesSupport
    • BeanContextSupport
    • ...
  • java.sql
    • BatchUpdateException
    • DataTruncation
    • ...
  • javax.management
    • Lista de atributos
  • javax.print.attribute.standard
    • JobStateReasons
    • ...
  • ...

Esta es una lista enorme. Y toca todo tipo de paquetes por ahí.

Además, desea minimizar dependencias de paquetes circulares . Si una clase en el paquete A depende de una clase en el paquete B que depende de una clase en el paquete A, usted tiene una dependencia circular. No siempre son malos porque existen, pero conducen a otras dependencias circulares y eso puede ser algo malo. No está mal por sí mismo, pero es un olor de diseño que indica que el acoplamiento entre dos clases o paquetes es demasiado estrecho. Es el inicio de la deuda técnica acumulada.

La solución a esto es decir "sí, la interfaz de Iterable es algo de lo que se depende en una amplia variedad de clases y paquetes en toda la estructura de java y javax. Debería estar en la base más básica del lenguaje. bibliotecas - java.lang. "

Y ahí es donde lo encontrarás.

Lectura relacionada:

respondido por el user40980 20.06.2015 - 02:37

Lea otras preguntas en las etiquetas