定义类型有两种方式:
一种是注解,这个之前已经提到过。
另一种是标记接口(不含方法声明的接口)如Serializable:

image.png
将其作为标记来使用的好处是,可以在方法签名中要求类包含哪些标记(即实现了哪些接口),从而使得不符合规范的代码可以在编译时及时检查出来。
标记接口相较于标记注解的优点:
- 标记接口定义的类型是由被标记类的实例实现的。比如class A implements Serializable,那么所有使用Serializable作为参数的地方都可以用A。
- 可以被更加精确的锁定。使用注解可以加在任何类上,如果一个标记只适用于特殊接口的实现,就可以使用标记接口。比如Set继承于Collection,它没有实现任何Collection的方法。Set的存在依据就是标记这个接口的所有实现类都是集合内元素唯一的。
- 注解的优点就是"更大注解机制的一部分",因此标记注解在支持标记的框架中具有一致性。
之前一直认为接口是用来定义行为的,没想到没有方法的接口还可以当做标记来使用。
当我们需要添加的标记只用于类级别时,可以优先使用标记接口。如果需要应用于任何程序元素时,则应该使用注解。