亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

注釋名稱中的“+”是否有特殊含義?

注釋名稱中的“+”是否有特殊含義?

慕工程0101907 2022-11-30 16:18:49
我正在查看Checker Framework提供的中央 Maven 存儲庫中自定義注釋 jdk-8的 .jar 文件的字節碼。在那里我注意到Object.class和Class.class文件中有一些無效的 Java 代碼。當我在 Eclipse 中加載 jar 時,它是一個具有以下語法的注釋:@jdk.Profile+Annotation(value=(int) 1) public class java.lang.Object {現在,據我所知,這個注釋名稱是無效的 Java。但是,我假設它可能對編譯器有意義(類似于編譯器分配給匿名類的名稱)。我不確定是什么,在網上搜索時也找不到任何相關信息。因此,查詢。任何幫助表示贊賞。
查看完整描述

1 回答

?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

我不認為它有什么特別的意義。這是一個與JEP 161相關的系統注釋,它添加了附加的“配置文件”,以便您可以在 JRE 的子集上運行應用程序。它以編程方式添加,因此不需要遵守語法規則。

在 OpenJDK 錯誤跟蹤器中搜索此 JEP ,發現添加了“合成”注釋的提交。

看起來好像已經為 a 建立了先例sun.Proprietary+Annotation,他們只是遵循慣例。

我懷疑 Sun 注釋以這種方式命名的原因已經消失在時間的編年史中——它早于 Java 6,在代碼開源之前。

我還發現了對 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);


查看完整回答
反對 回復 2022-11-30
  • 1 回答
  • 0 關注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號