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

时间:2011-09-23 08:52:37

标签: java terminology signature descriptor

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

3 个答案:

答案 0 :(得分:12)

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

2.1.2内部名称

“类的内部名称就是 此类的完全限定名称,其中点用斜杠替换。“

com/snark/Boojum

2.1.3类型描述符

[[Ljava/lang/Object;

2.1.4方法描述符

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

int[] m(int i, String s) becomes (ILjava/lang/String;)[I

<强> 4.1。泛型(用于签名)

“出于向后兼容性原因,有关泛型类型的信息不是 存储在类型或方法描述符中(在介绍之前很久就定义了) Java 5)中的泛型,但在类似的结构中称为类型,方法 和班级签名。“

这个Java:

List<List<String>[]>

成为此签名:

Ljava/util/List<[Ljava/util/List<Ljava/lang/String;>;>;

答案 1 :(得分:10)

查看JVM spec section 4.3.3,一方面描述符包含返回类型 - 而这不是方法signature的一部分。

  

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

但是...

  

如果两个方法具有相同的名称和参数类型

,则它们具有相同的签名

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

答案 2 :(得分:5)

“descriptor”可能是指the JVM spec § 4.3.3中定义的方法描述符。它描述了参数 types 和方法的返回类型。 包含方法名称。

“signatur”可能是指Java Language Specification § 8.4.2中定义的签名。它包含方法的名称以及参数类型。 包含返回类型。

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