Seperti pada diagram di bawah ini, kecuali untuk antarmuka Iterable
, semua konstruksi yang tersisa (antarmuka / kelas / kelas abstrak) duduk dalam paket yang samajava.util
Mengapa Iterable
duduk dalam java.lang
paket?
Catatan: Tujuannya adalah untuk memahami aspek pengemasan pemrograman java.
java
api
packages
collections
pertukaran berlebihan
sumber
sumber
Jawaban:
Sebagaimana dijelaskan dalam javadoc -nya , tujuan dari
Iterable
adalah untuk mendukung sintaks bahasa tertentu :Dengan demikian, itu milik paket lang , yang
Kelas-kelas lain pada diagram milik JCF dan karenanya, ada dalam paket util yang
sumber
Iterator
idealnya juga ada dijava.lang
, sejakIterable
itu. Tentu saja, itu harus dalamjava.util
alasan kompatibilitas ke belakang (telah diperkenalkan di JDK jauh sebelum konstruksi "foreach" memberinya peran dalam bahasa yang tepat).Iterable
padaIterator
,java.lang
paket umumnya tidak tergantung pada kelas dijava.util
.)Karena banyak hal mengimplementasikan antarmuka Iterable atau memperluasnya sebagai sub antarmuka.
Kelas implementasi adalah:
Ini daftar yang sangat besar. Dan itu menyentuh semua jenis paket di luar sana.
Selanjutnya, Anda ingin meminimalkan dependensi paket melingkar . Jika kelas dalam paket A tergantung pada kelas dalam paket B yang tergantung pada kelas dalam paket A, Anda memiliki ketergantungan melingkar. Mereka tidak selalu buruk bahwa mereka ada - tetapi mereka mengarah pada dependensi melingkar lainnya dan itu bisa menjadi hal yang buruk. Ini tidak buruk dengan sendirinya, tetapi ini adalah bau desain yang menunjukkan bahwa sambungan antara dua kelas atau paket terlalu ketat. Ini adalah awal dari akumulasi utang teknis.
Solusi untuk ini adalah dengan mengatakan "ya, antarmuka Iterable adalah sesuatu yang bergantung pada berbagai kelas dan paket di seluruh keseluruhan struktur java dan javax. Ini harus berada di pustaka bahasa yang paling dasar - java .lang. "
Dan di situlah Anda akan menemukannya.
Bacaan terkait:
sumber