一、標記接口(marker interface).net
- 沒有包含方法聲明的接口,只是代表一個類實現了具備某種屬性的接口
- 好比:Serializable 接口::僅代表可被序列化或可被寫入ObjectOutputStream
標記註解使得標記接口過期的說法是不對的接口
- 標記接口定義的類型由被標記類的實例實現的,標記註解沒有這樣的類型(這樣編譯是就會暴露錯誤,不用等到運行時)
- 能夠更加精確的被鎖定::@Target 能夠用於任何地方,標記接口能夠被擴展成某個合適的接口
- Set 接口是有限制的標記接口,改進了Collection 的幾個契約(add、equals、hashCode)
標記註解賽過標記接口最大優勢在於:get
- 經過默認的方式添加註解類型元素,給已被使用的註解類型添加更多的信息,簡單註解會變得愈來愈豐富
- 標記接口是不可能作到的
標記註解另外一個優勢:hash
二、何時使用?io
- 標記是應用到任何程序元素而不是接口和類,必須使用註解
- 若是隻用於類和接口,這樣使用標記接口,能夠做爲相關方法參數類型
- 若是是多個方法中使用,永遠做爲標記特殊接口的元素,就用標記接口的子接口
- 若是不是,用標記註解