【发布时间】:2018-04-22 03:17:17
【问题描述】:
在阅读有关标记接口的信息时,我偶然发现了以下站点:Item 37: Use marker interfaces to define types
在这里,根据 Joshua Bloch 的说法,与 Marker 注释相比,Marker 接口有两个优点。
标记接口定义了一种类型,该类型由 标记的类;标记注释没有。这个的存在 type 允许您在编译时捕获您无法捕获的错误 如果您使用了标记注释,则捕获直到运行时。
标记接口相对于标记注释的另一个优势是 他们可以更准确地定位。如果注释类型是 用目标
ElementType.TYPE声明,它可以应用于任何 类或接口。假设您有一个适用的标记 仅适用于特定接口的实现。如果你定义它 作为一个标记接口,你可以让它扩展唯一的接口到 它适用,保证所有标记的类型也是 它适用的唯一接口的子类型。
好的,第一点理解了,但我不确定我是否正确理解了第二点:
如果使用目标
ElementType.TYPE声明注释类型,则它可以应用于任何类或接口。
同样,如果我有一个标记接口,那么它也可以应用于任何类或接口。关于标记注释和标记接口不是说同样的话吗? 如何更精确地定位标记界面?
第二点还提到:
您可以让 [标记接口] 扩展它适用的唯一接口,确保所有标记类型也是它适用的唯一接口的子类型。
您不能也通过使用@Inherited 元注释来实现这一点吗?
【问题讨论】:
-
我已经编辑了这个问题,使它更容易理解。如果我改变太多你当然可以把它改回来。
标签: java interface annotations