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 Serializableantarmuka metode writeObject(Object)dari ObjectOutputStreammelakukan sesuatu seperti instanceOf Serializableuntuk mendeteksi apakah mengimplementasikan kelas Serializable& melempar NotSerializableExceptionsesuai. 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
instanceOfoperator, mengapa metodenya tidak bisa seperti ituwriteObject(Serializable)sehingga ada pemeriksaan jenis waktu kompilasi daripada runtime?Bagaimana Anotasi lebih baik daripada Antarmuka Penanda?
Serializablekarena Anotasi tidak masuk akal dan@NonNullsebagai Antarmuka tidak masuk akal. Saya akan mengatakan: Anotasi adalah Penanda + Metadata. BTW: Pelopor Anotasi adalah XDoclet, lahir di Javadoc, dibunuh oleh Anotasi.