Saya diajari bahwa antarmuka Marker di Java adalah antarmuka kosong dan digunakan untuk memberi sinyal kepada compiler atau JVM bahwa objek kelas yang mengimplementasikan antarmuka ini harus diperlakukan dengan cara khusus, seperti serialisasi, kloning, dll.
Tapi belakangan ini saya belajar bahwa sebenarnya tidak ada hubungannya dengan compiler atau JVM. Misalnya, dalam kasus Serializable
antarmuka metode writeObject(Object)
dari ObjectOutputStream
melakukan sesuatu seperti instanceOf Serializable
untuk mendeteksi apakah mengimplementasikan kelas Serializable
& melempar NotSerializableException
sesuai. Semuanya ditangani dalam kode dan ini tampaknya menjadi pola desain jadi saya pikir kita bisa mendefinisikan antarmuka penanda kita sendiri.
Sekarang keraguan saya:
Apakah definisi antarmuka marker yang disebutkan di atas pada poin pertama salah? Bagaimana kita bisa mendefinisikan antarmuka Marker?
Dan alih-alih menggunakan
instanceOf
operator, mengapa metodenya tidak bisa seperti ituwriteObject(Serializable)
sehingga ada pemeriksaan jenis waktu kompilasi daripada runtime?Bagaimana Anotasi lebih baik daripada Antarmuka Penanda?
Serializable
karena Anotasi tidak masuk akal dan@NonNull
sebagai Antarmuka tidak masuk akal. Saya akan mengatakan: Anotasi adalah Penanda + Metadata. BTW: Pelopor Anotasi adalah XDoclet, lahir di Javadoc, dibunuh oleh Anotasi.