标记注释与标记接口
在阅读有关标记接口的信息时,我偶然发现了以下站点: 项目 37:使用标记接口定义类型
根据 Joshua Bloch 的说法,标记接口比标记注释有两个优点。
标记接口定义由标记类的实例实现的类型;标记批注则不然。此类型的存在允许您在编译时捕获错误,如果使用标记批注,则在运行时之前无法捕获这些错误。
与标记注释相比,标记界面的另一个优点是可以更精确地定位它们。如果用 target 声明注释类型,它可以应用于任何类或接口。假设您有一个仅适用于特定接口实现的标记。如果将其定义为标记接口,则可以让它扩展它适用的唯一接口,从而保证所有标记的类型也是它适用的唯一接口的子类型。
ElementType.TYPE
好的,第一点被理解了,但我不确定我是否正确地理解了第二点:
如果用 target 声明注释类型,它可以应用于任何类或接口。
ElementType.TYPE
同样,如果我有一个标记接口,那么它也可以应用于任何类或接口。它不是在说标记注释和标记接口的同样的事情吗?如何更精确地定位标记界面?
第二点还提到:
您可以让 [标记接口] 扩展它适用的唯一接口,保证所有标记的类型也是它适用的唯一接口的子类型。
难道你不能通过使用元注释@Inherited
通过注释来实现这一点吗?