参数化的自定义注释继承其他注释

时间:2019-10-25 10:56:47

标签: java inheritance annotations

我有一个参数化注释(在这种情况下为@MiTag1)。我想创建一个扩展了@MiTag2和其他注释的新注释(@MiTag1),并且我希望@MiTag1的值被{{1 }}

在我的代码示例中,@MiTag2必须与@MiTag2("bla")相同,但@MiTag1("bla")内不能包含硬编码“ bla”。

@MiTag2

1 个答案:

答案 0 :(得分:0)

Java不允许您从其他注释扩展。这是设计使然,因为它将引入一个相当复杂的类型系统。这个问题已经得到详细解答here,但重要的部分是:

  

为什么您不支持注释子类型(一种注释类型   延伸另一个)?

     

它使注释类型系统复杂化,并使它更多   很难编写“特定工具”。

     

...

     

“特定工具” —用于查询已知注释类型的程序   任意外部程序。存根生成器例如   这个类别。这些程序将读取带注释的类,而无需   将它们加载到虚拟机中,但将加载注释   接口。

(来自 pedromarce 的原始答案)

要绕过此问题,您可以使用两个注释来注释目标类型 @MiTag1 @MiTag2并将应继承注释的默认值设置为父注释的值。

此外,您可以在继承上使用合成,并向@MiTag2添加类型@MiTag2的注释。

相关问题