Struttura degli imballaggi delle raccolte Java (java.util) - perché Iterable si trova in java.lang?

12

Come per il diagramma sottostante, eccetto per l'interfaccia Iterable , tutti i restanti costrutti (interfaccia / classe / classe astratta) si trovano nello stesso pacchetto java.util

Perché Iterable si siede nel pacchetto java.lang ?

Nota: l'intenzione è comprendere l'aspetto della confezione della programmazione java.

    
posta overexchange 20.06.2015 - 02:19
fonte

2 risposte

22

Come spiegato nel suo javadoc , lo scopo di Iterable è per supportare la sintassi specifica del linguaggio :

Implementing this interface allows an object to be the target of the "foreach" statement

In quanto tale, appartiene al pacchetto lang , che

Provides classes that are fundamental to the design of the Java programming language.

Altre classi nel diagramma appartengono a JCF e quindi, sono nel pacchetto util che

Contains the collections framework...

    
risposta data 20.06.2015 - 04:17
fonte
6

Poiché molte cose implementano l'interfaccia Iterable o estendono è come interfaccia secondaria.

Le classi di implementazione sono:

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

Questa è una lista enorme. E tocca tutti i tipi di pacchetti là fuori.

Inoltre, si desidera ridurre al minimo le dipendenze dei pacchetti circolari . Se una classe nel pacchetto A dipende da una classe del pacchetto B che dipende da una classe nel pacchetto A, hai una dipendenza circolare. Non sono sempre cattivi che esistono - ma portano ad altre dipendenze circolari e questo può essere una cosa negativa. Non è male di per sé, ma è un odore di design che indica che l'accoppiamento tra due classi o pacchetti è troppo stretto. È l'inizio dell'accumulazione del debito tecnico.

La soluzione a questo è dire "sì, l'interfaccia Iterable è una cosa che dipende da un'ampia varietà di classi e pacchetti in tutta la struttura java e javax. Dovrebbe trovarsi nella maggior parte della base della lingua librerie - java.lang. "

Ed è qui che lo troverai.

Lettura correlata:

risposta data 20.06.2015 - 02:37
fonte

Leggi altre domande sui tag