Zgodnie z poniższym diagramem, z wyjątkiem interfejsu Iterable
, wszystkie pozostałe konstrukcje (interfejs / klasa / klasa abstrakcyjna) znajdują się w tym samym pakieciejava.util
Dlaczego Iterable
siedzi w java.lang
paczce?
Uwaga: Intencją jest zrozumienie aspektu programowania Java.
java
api
packages
collections
nadmierna wymiana
źródło
źródło
Odpowiedzi:
Jak wyjaśniono w javadoc , celem
Iterable
jest obsługa konkretnej składni języka :Jako taki należy do pakietu lang , który
Inne klasy na schemacie należą do JCF, a zatem znajdują się w pakiecie użytkownika, który
źródło
Iterator
powinno byćjava.lang
, ponieważ takIterable
jest. Oczywiście musi to wynikaćjava.util
z powodów kompatybilności wstecznej (zostało wprowadzone w JDK na długo zanim konstrukt „foreach” nadał mu rolę we właściwym języku).Iterable
odIterator
Thejava.lang
opakowanie zwykle nie zależy od klasjava.util
).Ponieważ wiele rzeczy implementuje interfejs Iterable lub rozszerza go jako interfejs podrzędny.
Klasy implementacyjne to:
To ogromna lista. I dotyczy wszystkich rodzajów paczek.
Ponadto chcesz zminimalizować zależności między pakietami cyklicznymi . Jeśli klasa w pakiecie A zależy od klasy w pakiecie B, która zależy od klasy w pakiecie A, masz zależność cykliczną. Nie zawsze są złe, że istnieją - ale prowadzą do innych zależności cyklicznych, co może być złe. Sam w sobie nie jest zły, ale jest to zapach projektowy, który wskazuje, że połączenie między dwiema klasami lub pakietami jest zbyt ścisłe. To początek akumulacji długu technicznego.
Rozwiązaniem tego jest powiedzenie „tak, interfejs Iterable jest zależny od wielu różnych klas i pakietów w całej strukturze java i javax. Powinien znajdować się w najbardziej podstawowej bibliotece języków - java .lang. ”
I tam go znajdziesz.
Powiązana lektura:
źródło