【发布时间】:2025-12-13 04:50:02
【问题描述】:
作为我正在开发的编程语言的编译器的一部分,我在字节码中遇到了通用签名,我正在尝试对其进行解析并转换为 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
在这些类中的所有方法中,只有这些方法的签名中有::。我的问题是这个令牌的作用以及它为什么存在。
编辑
我知道 Java 语言 中的 :: 运算符,但这是字节码级别的东西。
【问题讨论】:
-
我的猜测是它与泛型有关
-
在为一种形式语言实现解析器时,您应该始终尝试首先引用该语言的the official specification。
标签: java generics jvm method-signature jvm-bytecode