ฉันได้รับการสอนว่าอินเทอร์เฟซ Marker ใน Java เป็นอินเทอร์เฟซที่ว่างเปล่าและใช้เพื่อส่งสัญญาณไปยังคอมไพเลอร์หรือ JVM ว่าอ็อบเจ็กต์ของคลาสที่ใช้อินเทอร์เฟซนี้ต้องได้รับการปฏิบัติด้วยวิธีพิเศษเช่นการทำให้เป็นอนุกรมการโคลนเป็นต้น
แต่เมื่อเร็ว ๆ นี้ฉันได้เรียนรู้ว่าจริงๆแล้วมันไม่มีส่วนเกี่ยวข้องกับคอมไพเลอร์หรือ JVM ยกตัวอย่างเช่นในกรณีของSerializableอินเตอร์เฟซที่วิธีการwriteObject(Object)ของObjectOutputStreamไม่บางอย่างเช่นinstanceOf Serializableการตรวจสอบว่าระดับการดำเนินการSerializableและพ่นNotSerializableExceptionตาม ทุกอย่างได้รับการจัดการในโค้ดและดูเหมือนว่าจะเป็นรูปแบบการออกแบบดังนั้นฉันคิดว่าเราสามารถกำหนดอินเทอร์เฟซเครื่องหมายของเราเองได้
ตอนนี้ข้อสงสัยของฉัน:
คำจำกัดความของอินเทอร์เฟซเครื่องหมายที่กล่าวถึงข้างต้นในจุดที่ 1 ผิดหรือไม่? เราจะกำหนดอินเทอร์เฟซ Marker ได้อย่างไร?
และแทนที่จะใช้ตัว
instanceOfดำเนินการทำไมเมธอดถึงไม่เป็นแบบwriteObject(Serializable)นั้นเพื่อให้มีการตรวจสอบประเภทเวลาคอมไพล์แทนรันไทม์?คำอธิบายประกอบดีกว่าอินเทอร์เฟซมาร์กเกอร์อย่างไร
Serializableเนื่องจากคำอธิบายประกอบเป็นเรื่องไร้สาระและ@NonNullเนื่องจากอินเทอร์เฟซเป็นเรื่องไร้สาระ ฉันจะบอกว่า: คำอธิบายประกอบคือเครื่องหมาย + ข้อมูลเมตา BTW: Forefunner of Annotations คือ XDoclet ซึ่งเกิดใน Javadoc และถูกฆ่าโดย Annotations