Java 字节码签名

2023-12-11

作为我正在开发的编程语言的编译器的一部分,我在字节码中遇到了通用签名,我正在尝试将其解析并转换为 AST。解析算法大部分都有效,但似乎有一种特殊情况,其中这些签名的格式表现得有点奇怪。以下是其中一些案例:

java.util.Arrays#parallelSort: <T::Ljava/lang/Comparable<-TT;>;>([TT;)V
java.util.Arrays#parallelSort: <T::Ljava/lang/Comparable<-TT;>;>([TT;II)V
java.lang.Class#getAnnotation: <A::Ljava/lang/annotation/Annotation;>(Ljava/lang/Class<TA;>;)TA;
java.lang.Class#getAnnotationsByType: <A::Ljava/lang/annotation/Annotation;>(Ljava/lang/Class<TA;>;)[TA;
java.lang.Class#getDeclaredAnnotation: <A::Ljava/lang/annotation/Annotation;>(Ljava/lang/Class<TA;>;)TA;
java.lang.Class#getDeclaredAnnotationsByType: <A::Ljava/lang/annotation/Annotation;>(Ljava/lang/Class<TA;>;)[TA;
java.util.Arrays#parallelSort: <T::Ljava/lang/Comparable<-TT;>;>([TT;)V
java.util.Arrays#parallelSort: <T::Ljava/lang/Comparable<-TT;>;>([TT;II)V
java.util.Collections#sort: <T::Ljava/lang/Comparable<-TT;>;>(Ljava/util/List<TT;>;)V

在这些类的所有方法中,这些是唯一具有::在他们的签名中。我的问题是这个令牌的用途以及它存在的原因。

Edit

我知道关于::运算符在Java语言,但这是字节码级别的东西。


从 JSR 14 开始,定义的语法发生了变化,用于指定泛型类型的边界。

variable_name:class_type_bound:interface_type_bounds

所以对于你的例子:

<T::Ljava/lang/Comparable<-TT;>;>

这将反映出:

<T extends Comparable<T>>

变量名称是T,没有类类型绑定,因此被省略,并且有一个类型的接口绑定Comparable<T>.

您的所有示例都遵循这一点,但有许多不同的形式:

<T:Ljava/lang/Object;>(Ljava/util/Collection<TT;>;)TT;
<T::Ljava/lang/Comparable;>(Ljava/util/Collection<TT;>;)TT;
<T:Ljava/lang/Object;:Ljava/lang/Comparable;(Ljava/util/Collection<TT;>;)TT;

Source

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 字节码签名 的相关文章

随机推荐

  • 通用接口中的协变

    我想创建一个可排序的 observableCollection 所以我开始创建一个继承 observable 的类 并使用一些方法对其进行排序 然后我希望该类将索引保留到子类中 因此我创建了一个接口 该接口公开了我可以写入的索引属性 并且我
  • Xcode 无法安装“Runner”代码:-402620392(Flutter 应用程序)

    XCode 版本 11 1 11A1027 颤振版本1 17 5 我尝试在 iPad 12 4 6 上运行我的 Flutter 应用程序 它构建时没有错误 但在安装步骤中显示消息 Unable to install Runner Domai
  • get set 对于简单变量有什么好处[重复]

    这个问题在这里已经有答案了 可能的重复 公共字段与自动属性 我认为这个问题会在某个地方得到解答 但我在通常的地方找不到它 我想知道这样做有什么好处 private int foo public int foo get return foo
  • 不同的 Spring 注解 XML 声明

    似乎有多个 XML 标签告诉 Spring 使用注释
  • HTML5 使用 src 使用原始二进制数据

    假设我正在数据库中存储一个音频文件 稍后我想在我的应用程序中使用该 BLOB 或二进制文件
  • 如何访问 pybluez 中的蓝牙低级功能?

    是否有用于较低级别 bt 功能的 pybluez 包装函数 我在文档中找不到任何内容 我需要使用与以下功能等效的功能 l2ping single ping hcitool cc hcitool rssi hcitool lq hcitool
  • 不同窗口中两个文本框之间的数据绑定

    我创建了一个程序 在选中或取消选中复选框时更改文本框中的名称 我想在不同的窗口中复制这个文本框 我认为在 xaml 中使用数据挖掘是可能的 但名称仅出现在一个窗口中 第二个窗口窗口不接收数据 我向您展示了两个窗口的代码 你能帮助我吗 谢谢
  • IE 中的上标下划线

    由于时间有限 我的发言会很简短 所以如果没有我希望的那么详细 我深表歉意 我有一些代码 print a href Some text a
  • 从类路径目录获取资源列表

    我正在寻找一种方法来从给定的类路径目录中获取所有资源名称的列表 类似于方法List
  • Bootstrap 4 popper 未定义

    我正在尝试启动下拉菜单 每当我单击按钮时 我就会得到TypeError popper is undefined 我尝试导入捆绑包而不是bootstrap import bootstrap import bootstrap dist js b
  • 本地主机上的画架 JS 安全限制

    我正在学习 EaselJS 但遇到了这个奇怪的错误 无法从画布获取图像数据 因为画布已被跨源数据污染 easeljs 0 6 0 min js 71 未捕获 发生错误 这很可能是由于使用本地或跨域图像读取画布像素数据的安全限制 问题是 我的
  • 基于 ggplot 中百分位的颜色代码点

    我有一些非常大的文件 其中包含基因组位置 位置 和相应的群体遗传统计数据 值 我已成功绘制这些值 并希望对前 5 蓝色 和 1 红色 值进行颜色编码 我想知道在 R 中是否有一种简单的方法可以做到这一点 我已经尝试编写一个定义分位数的函数
  • PostgreSQL 上的透视行

    我有一个返回整行的查询 我需要将此结果转换到一个新表中 SELECT id no stud name group no class 1 class 2 class 3 class 4 FROM tbl stud class 这将返回以下内容
  • 通过 C# 中的反射获取“基本”数据类型,而不是奇怪的可空数据类型

    我的基本需求是从 LINQ to SQL 查询生成的匿名类型中获取数据类型 我有一段代码 比我能写的更聪明 因为我还没有真正深入研究反射 它从匿名类型返回数据类型 并且非常适合 linq2sql 属性中标记为 不可为空 的元素 因此 如果我
  • Spring Rest - 生成 Json 数据的异常[重复]

    这个问题在这里已经有答案了 我有一个值对象 我想通过 json Rest 调用公开它 我的项目中有许多其他的休息调用都工作得很好 但这个 1 由于某种原因不能 当我尝试返回该对象时 我收到一个我不知道如何解决的异常 值对象代码如下 减去访问
  • 如何将父 div 放置在其子 div 之上?

    我有一个容器 div 它有background color red 这个容器大约有 12 个孩子 最后一个孩子有background color blue 我试图将容器移到孩子的顶部background color blue 我为容器使用了
  • 如何在nodejs aws-sdk模块中设置多个aws凭证?

    我需要对 s3 SNS 等不同服务使用多个 AWS 凭证 var awsS3 require aws sdk var awsSes require aws sdk awsS3 config update region config awsR
  • 如何将 mysql 转储文件导入 Docker mysql 容器

    提前致以问候和感谢 我实际上是 docker 和 docker compose 的新手 迄今为止观看了大量视频并阅读了很多文章并进行了尝试 我有一个前端容器和一个后端容器 它们作为 Dockerfile 和 docker compose 设
  • 在 tableHeaderView 中使用自动布局

    我有一个UIView包含多行的子类UILabel 该视图使用自动布局 我想将此视图设置为tableHeaderView of a UITableView not节标题 该标题的高度将取决于标签的文本 而标签的文本又取决于设备的宽度 自动布局
  • Java 字节码签名

    作为我正在开发的编程语言的编译器的一部分 我在字节码中遇到了通用签名 我正在尝试将其解析并转换为 AST 解析算法大部分都有效 但似乎有一种特殊情况 其中这些签名的格式表现得有点奇怪 以下是其中一些案例 java util Arrays p