一、标记接口(marker interface).net
- 没有包含方法声明的接口,只是代表一个类实现了具备某种属性的接口
- 好比:Serializable 接口::仅代表可被序列化或可被写入ObjectOutputStream
标记注解使得标记接口过期的说法是不对的接口
- 标记接口定义的类型由被标记类的实例实现的,标记注解没有这样的类型(这样编译是就会暴露错误,不用等到运行时)
- 能够更加精确的被锁定::@Target 能够用于任何地方,标记接口能够被扩展成某个合适的接口
- Set 接口是有限制的标记接口,改进了Collection 的几个契约(add、equals、hashCode)
标记注解赛过标记接口最大优势在于:get
- 经过默认的方式添加注解类型元素,给已被使用的注解类型添加更多的信息,简单注解会变得愈来愈丰富
- 标记接口是不可能作到的
标记注解另外一个优势:hash
二、何时使用?io
- 标记是应用到任何程序元素而不是接口和类,必须使用注解
- 若是只用于类和接口,这样使用标记接口,能够做为相关方法参数类型
- 若是是多个方法中使用,永远做为标记特殊接口的元素,就用标记接口的子接口
- 若是不是,用标记注解