一尘不染

为什么无法在Java中扩展注释?

java

我不明白为什么Java注释中没有继承关系,就像Java类一样。我认为这将非常有用。

例如:我想知道给定的注释是否为验证者。通过继承,我可以自反地浏览超类,以了解此注释是否扩展了ValidatorAnnotation。否则,我该如何实现?

那么,谁能给我这个设计决定的理由?


阅读 270

收藏
2020-03-09

共1个答案

一尘不染

关于未采用这种方式进行设计的原因,你可以在JSR 175设计常见问题解答中找到答案,其中说:

你为什么不支持注释子类型化(一种注释类型扩展了另一种注释类型)?

它使注释类型系统变得复杂,并使编写“特定工具”变得更加困难。

“特定工具” —查询任意外部程序的已知注释类型的程序。例如,存根生成器就属于此类。这些程序将读取带注释的类而不将其加载到虚拟机中,但是将加载注释接口。

所以,是的,我想,原因只是KISS。无论如何,似乎这个问题(以及许多其他问题)已作为JSR 308的一部分进行了研究,你甚至可以找到具有Mathias Ricken已经开发的此功能的替代编译器。

2020-03-09