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