"描述符"和"签名"之间有什么区别?

akr*_*kry 12 java terminology descriptor signature

我现在使用ASM(Java字节码检测库).要检索给定方法的签名,有一个名为"desc"的字段.我想这是"描述符"的缩写,但为什么不将它命名为"签名"?"描述符"和"签名"之间有什么区别吗?

Jam*_*ore 12

在asm的上下文中,您关心内部名称,方法描述符,类型描述符和签名.部分编号来自asm doc.

2.1.2内部名称

"一类的内部名称就是这个类,其中点是用斜杠取代的全名."

com/snark/Boojum
Run Code Online (Sandbox Code Playgroud)

2.1.3类型描述符

[[Ljava/lang/Object;
Run Code Online (Sandbox Code Playgroud)

2.1.4方法描述符

方法描述符是一个类型描述符列表,用于在单个字符串中描述方法的参数类型和返回类型.

int[] m(int i, String s) becomes (ILjava/lang/String;)[I
Run Code Online (Sandbox Code Playgroud)

4.1.泛型(用于签名)

"为了向后兼容的原因有关通用类型的信息没有被存储在类型或方法描述符(其被Java 5中引入泛型之前长的定义),但在类似的结构称为类型,方法和类签名."

这个Java:

List<List<String>[]>
Run Code Online (Sandbox Code Playgroud)

成为这个签名:

Ljava/util/List<[Ljava/util/List<Ljava/lang/String;>;>;
Run Code Online (Sandbox Code Playgroud)

  • 这个答案既正确又明确,为什么不选择这个呢? (2认同)

Jon*_*eet 10

查看JVM规范部分4.3.3,一方面描述符包含返回类型 - 而这不是方法签名的一部分.

方法描述符表示方法采用的参数及其返回的值

但...

如果两个方法具有相同的名称和参数类型,则它们具有相同的签名

(鉴于此,还不清楚描述符是否包含方法的名称 ......)


Joa*_*uer 5

"descriptor"可能是指JVM规范4.3.3中定义的方法描述符.它描述了方法的参数类型和返回类型.它包含方法名.

"signatur"可能是指Java语言规范第8.4.2节中定义的签名.它包含方法的名称以及参数类型.它包含返回类型.

请注意,这两个术语在两个不同的位置和不同的级别定义.方法描述符存在于JVM级别,因此它与Java 语言非常分离.然而,签名是一个非常相似的概念,但它在Java 语言级别上起作用(因为它在JLS中定义).