Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “与”的区别是什么;描述符;及;签名;?_Java_Terminology_Signature_Descriptor - Fatal编程技术网

Java “与”的区别是什么;描述符;及;签名;?

Java “与”的区别是什么;描述符;及;签名;?,java,terminology,signature,descriptor,Java,Terminology,Signature,Descriptor,我现在正在使用ASM(Java字节码检测库)。为了检索给定方法的签名,有一个名为“desc”的字段。我猜这是“描述符”的缩写,但为什么不命名为“签名”?“描述符”和“签名”之间有什么区别吗?首先,描述符包含返回类型,而这不是方法的一部分 方法描述符表示方法获取的参数及其返回的值 但是 如果两个方法具有相同的名称和参数类型,则它们具有相同的签名 (鉴于此,还不清楚描述符是否包含方法的名称…“描述符”可能指中定义的方法描述符。它描述方法的参数类型和返回类型。它不包含方法名称 “签名”可能是指合同中定

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

首先,描述符包含返回类型,而这不是方法的一部分

方法描述符表示方法获取的参数及其返回的值

但是

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

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

“描述符”可能指中定义的方法描述符。它描述方法的参数类型和返回类型。它不包含方法名称

“签名”可能是指合同中定义的签名。它包含方法的名称以及参数类型。它不包含返回类型


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

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

2.1.2内部名称

[[Ljava/lang/Object;
“类的内部名称就是 此类的完全限定名称,其中点替换为斜线。“

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;>;>;
Ljava/util/List;

这个答案是正确而明确的,为什么不选择这个呢?@FredSuvn这个答案来自近十年前。非常非常非常。。。。最初的请求者不太可能记得关于它的任何事情,或者这些天正在处理类似的事情。