gpt4 book ai didi

java - 注释名称中的 '+' 有什么特殊含义吗?

转载 作者:IT老高 更新时间:2023-10-28 21:02:04 26 4
gpt4 key购买 nike

我正在查看 custom annotated jdk-8 的 .jar 文件的字节码在 central maven repositoryChecker Framework 提供.

我注意到 Object.classClass.class 文件中有一些无效的 Java 代码。当我在 Eclipse 中加载 jar 时,它是一个注释,语法如下:

@jdk.Profile+Annotation(value=(int) 1)
public class java.lang.Object {

现在,据我所知,这个注解名称是无效的 Java。但是,我假设它可能对编译器有意义(类似于编译器分配给匿名类的名称)。我不确定是什么,我在网上搜索也找不到任何关于它的信息。因此,查询。

感谢任何帮助。

最佳答案

我不认为它有什么特殊含义。这是与JEP 161相关的系统注释它添加了附加的“配置文件”,以便您可以在 JRE 的子集上运行应用程序。它是以编程方式添加的,因此不需要遵守语法规则。

Searching the OpenJDK bug tracker对于这个 JEP 出现了 the commit where the "synthetic" annotation is added .

看起来好像已经为 sun.Proprietary+Annotation 建立了先例,他们只是遵循了约定。

我怀疑 Sun 注释以这种方式命名的原因已经被时代史所遗忘 - 它早于 Java 6,在代码开源之前。

我还找到了 a commit to jdeps他们在解析这些注释的地方并不重视它们的命名方式;他们只是对两者都使用完全限定的名称。


您也可以开始使用非法类型标识符——无需在 Oracle 工作!

final DynamicType.Unloaded<? extends Annotation> unloaded = new ByteBuddy()
.with(TypeValidation.DISABLED)
.makeAnnotation()
.name("jdk.Profile+Annotation")
.make();

final DynamicType.Loaded<? extends Annotation> loaded = unloaded.load(Test.class.getClassLoader());
final Class<? extends Annotation> myBadlyNamedAnnotation = loaded.getLoaded();

System.out.println(myBadlyNamedAnnotation);

关于java - 注释名称中的 '+' 有什么特殊含义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56183011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com