首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么JPMS允许将注释类型作为服务

为什么JPMS允许将注释类型作为服务
EN

Stack Overflow用户
提问于 2020-01-04 18:00:00
回答 1查看 156关注 0票数 7

在介绍JPMS服务时,Java语言规范第7.7.4节指出,“服务类型必须是类类型、接口类型或注释类型。”

我很难理解允许注释的意义。我的理解是,服务的JPMS概念是我们希望在运行时为其选择一个实现的东西。此外,为了有用,实现至少需要某种可能,而不是标识所请求的服务的原始类。但我认为注释不能使用“扩展”,所以这种情况永远不会发生?由此,我相信,如果我尝试使用注释类型来生成服务,我最终不可避免地会遇到这样一种情况,即服务查找所能返回的唯一东西,例如,SomeAnnotation.class,将完全是SomeAnnotation。这似乎毫无意义,所以我必须假设我错过了什么。

有人能说明这一点吗,也许还能提供注释如何成为“服务”的例子吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-06 09:17:36

虽然在Java中注释接口不能显式扩展任何接口(但隐式地扩展java.lang.annotation.Annotation),但它可以实现。也就是说,编写实现注释接口的具体类在语法上是可能的,尽管根据JLS 9.6注释类型,这样的类并不代表注释类型:

注释类型的子类或子接口本身从来都不是注释类型。

因此,我认为最初的问题归结为“为什么有人想要显式地实现注释接口?”这个问题已经被问到并回答了:实现注释的用例。所接受的答案建议这样做,以部分克服注释元素的值必须是常量表达式、类文字或枚举常量的限制(见JLS 9.7.1.正常注解):可以实现注释接口,以便用“注释”“注释”实现类,其中包括从配置文件、数据库等获取的动态数据。显然,这种技术还需要对读取注释的代码进行小的更改,因为实现注释接口的类实际上并不是被注释的,但是,它的实例可以作为注释的实例使用,就好像它是通过java.lang.Class.getAnnotationsByType检索的一样。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59593407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档