Melihat melalui Java Collections Framework, saya perhatikan beberapa antarmuka memiliki komentar (optional operation)
. Metode-metode ini memungkinkan kelas implementasi melalui UnsupportedOperationException
jika mereka tidak ingin mengimplementasikan metode itu.
Contoh dari ini adalah addAll
metode dalam Set Interface
.
Sekarang, seperti yang dinyatakan dalam rangkaian pertanyaan ini, antarmuka adalah kontrak yang menentukan untuk apa yang bisa digunakan oleh penggunaan.
Antarmuka penting karena mereka memisahkan apa yang dilakukan kelas dari bagaimana melakukannya. Kontrak yang mendefinisikan apa yang dapat diharapkan klien membuat pengembang bebas menerapkannya dengan cara apa pun yang mereka pilih, selama mereka menegakkan kontrak.
dan
Antarmuka adalah deskripsi tindakan yang dapat dilakukan suatu objek ... misalnya ketika Anda membalik sakelar lampu, lampu menyala, Anda tidak peduli bagaimana, hanya saja fungsinya. Dalam Pemrograman Berorientasi Objek, Interface adalah deskripsi dari semua fungsi yang harus dimiliki suatu objek agar menjadi "X".
dan
Saya pikir pendekatan berbasis antarmuka secara signifikan lebih baik. Anda kemudian dapat mengejek dependensi Anda dengan baik, dan semuanya pada dasarnya kurang erat.
Antarmuka + Ekstensi (mixin) vs Kelas Dasar
Mengingat bahwa tujuan dari antarmuka adalah untuk menentukan kontrak dan membuat dependensi Anda digabungkan secara longgar, tidakkah ada beberapa metode yang melemparkan UnsupportedOperationException
semacam kekalahan tujuannya? Itu berarti saya tidak bisa lagi menggunakan Set
dan hanya menggunakan addAll
. Sebaliknya, saya harus tahu implementasi apa yang Set
saya lewati, jadi saya bisa tahu apakah saya bisa menggunakan addAll
atau tidak. Bagi saya itu sepertinya tidak berharga.
Jadi apa gunanya UnsupportedOperationException
? Apakah ini hanya untuk mengganti kode lama, dan mereka perlu membersihkan antarmuka mereka? Atau apakah itu memiliki tujuan yang lebih masuk akal yang saya lewatkan?
src.zip
ia bekerja dengan baik. Ini membantu untuk mengetahui persis kode apa yang JRE jalankan kadang-kadang dan tidak tunduk pada JavaDoc yang bisa sedikit bertele-tele.
addAll
diHashSet
. Itu mengacu pada implementasi default diAbstractCollection
mana pasti tidak membuangUnsupportedOperationException
.