在上篇文章中的映射表结构体中简单提了一下Signature.


What's the Signature?【方法签名概念】

  • java与c/c++相互调用时,表示函数参数的描述符。描述符的存在是因为在相互调用的时候是在JVM中建立了一张映射表。可以把它想象成一张map表.其key是关键的字符串,value是函数指针。通过key找到对应的函数指针,通过java虚拟机去调用函数指针,就实现了相互调用。

如何创建上面说到的key?

通用的做法是函数名与参数结合起来构成一个key,这样的一个key就不会产生不唯一性。

Signature就是描述函数方法的输入输出参数。将这个描述符和函数名拼接在一起就构成了关键的唯一的key.

  • 输入参数放在()内,输出参数放在()外
  • 多个参数之间顺序存放,用分号(;)分割

 

原始类型的Signature:

Java类型 符号
boolean  Z
byte B
char  C
short S
int  I
long L
float  F
double D
void V

类的Signature:

  • Java对象参数"L包路径/类名"
  • Java数组 "【"

例如: ([YinLei;)[Lyinlei;

输入参数是YinLei的这个类的数组。输出参数不是原始类型,是自定义的一个类。

等价于 YinLei[] xxx(YinLei[]);

([Ljava/lang/String;)[Ljava/lang/Object:等价于Object[] xxx(String[] s)

 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐