ฉันได้รับการสอนว่าอินเทอร์เฟซ 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