小编典典

为什么不能在 Java 中扩展注解?

all

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

例如:我想知道给定的注释是否是验证器。通过继承,我可以反射性地浏览超类以了解此注释是否扩展了ValidatorAnnotation.
否则,我怎么能做到这一点?

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


阅读 88

收藏
2022-05-30

共1个答案

小编典典

关于它不是这样设计的原因,您可以在JSR 175设计常见问题解答中找到答案,其中说:

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

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

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

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

2022-05-30