我有一个参数化注释(在这种情况下为@MiTag1
)。我想创建一个扩展了@MiTag2
和其他注释的新注释(@MiTag1
),并且我希望@MiTag1
的值被{{1 }}
在我的代码示例中,@MiTag2
必须与@MiTag2("bla")
相同,但@MiTag1("bla")
内不能包含硬编码“ bla”。
@MiTag2
答案 0 :(得分:0)
Java不允许您从其他注释扩展。这是设计使然,因为它将引入一个相当复杂的类型系统。这个问题已经得到详细解答here,但重要的部分是:
为什么您不支持注释子类型(一种注释类型 延伸另一个)?
它使注释类型系统复杂化,并使它更多 很难编写“特定工具”。
...
“特定工具” —用于查询已知注释类型的程序 任意外部程序。存根生成器例如 这个类别。这些程序将读取带注释的类,而无需 将它们加载到虚拟机中,但将加载注释 接口。
(来自 pedromarce 的原始答案)
要绕过此问题,您可以使用两个注释来注释目标类型
@MiTag1 @MiTag2
并将应继承注释的默认值设置为父注释的值。
此外,您可以在继承上使用合成,并向@MiTag2
添加类型@MiTag2
的注释。