私が取り組んでいるプログラミング言語のコンパイラの一部として、解析して 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 言語::
の演算子については知っていますが、これはバイトコード レベルのものです。