当前位置: 首页 > 面试题库 >

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

商天逸
2023-03-14
问题内容

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

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

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


问题答案:

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

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

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

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

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



 类似资料:
  • 我对Java Swing开发非常陌生,我发现在GUI中使用PropertyChangeListener有一些困难。 所以我有一个Main类,它实现了Property tyChangeListener接口: 然后是LoginFrame类: 正如您在这个LoginFrame类中所看到的,当用户单击JButton时,将执行actionPerformed方法(它可以工作,因为我通过println看到它),

  • 问题内容: 事实并非如此,这让我感到惊讶。 我认为,如果这样声明,那将是很有意义的: 毕竟,是的集合,不是吗? 那么,为什么没有这样一个很好的实现呢? 感谢Cletus提供的最权威的答案,但是我仍然想知道为什么,如果你已经可以查看(通过),那么它不仅扩展了该接口。 如果a 是a ,则元素是什么?唯一合理的答案是“键值对” 确实会很棒! 但这提供了非常有限的(且不是特别有用的)Map抽象。 但是,如

  • 我知道一些关于AbstractQueuedSynchronizer的详细信息。它是一个用于创建依赖于状态的类或同步器的框架。但我不理解在ThreadPoolExecutor的Worker中扩展这个类的意义。 由Worker类的签名可以推断出以下内容: > 提交新的可运行/可调用任务时,将创建一个新的工作对象。 Worker的新对象可以被视为新线程。 方法将添加新的worker(或只是一个任务)并在

  • 我试图添加一个新函数(Http触发器)与CosmosDB输入绑定。 在阅读Azure Functions Version 2中的输入绑定手册时,我发现需要注册绑定扩展(https://docs.microsoft.com/en-us/Azure/azure-functions/Functions/functions-triggers-bindings#register-bindings-exten

  • 在我的项目中,我使用预定义的注释: 的源代码: 我想编写自定义注释,它将与使用(Secure.class)的

  • 扩展是可定制化浏览体验的小程序,它们使用户可以根据个人需要或者偏好定制 Chrome 的功能和行为。它们基于 Web 技术(例如 HTML,JavaScript 和 CSS)构建。 扩展必须满足狭义定义且易于理解的单一目的(译者注:功能简单易懂化)。一个扩展可以包括多个组件和一系列功能,只要所有的内容都有助于实现共同的目标。 用户交互界面应尽量小且有意图。他们的范围从简单的图标,如右侧显示的 Go