gpt4 book ai didi

Java 字节码签名

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:54 25 4
gpt4 key购买 nike

作为我正在使用的编程语言的编译器的一部分,我在字节码中遇到了通用签名,我正在尝试将其解析并转换为 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

在这些类中的所有方法中,这些是唯一在其签名中具有 :: 的方法。我的问题是这个 token 的作用以及它存在的原因。

编辑

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

最佳答案

从 JSR 14 开始,有一个定义的语法发生了变化,以指定泛型类型的边界。

variable_name:class_type_bound:interface_type_bounds

所以对于你的例子:

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

这会反射(reflect):

<T extends Comparable<T>>

变量名是T , 没有类类型绑定(bind)所以它被省略了,并且有一个类型为 Comparable<T> 的接口(interface)绑定(bind).

你所有的例子都遵循这个,但是有很多不同的形式:

<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

关于Java 字节码签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28486081/

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