基于JVM规范,如何编写接收不同类型参数的方法描述符?
JVM方法描述符生成指南(针对你的示例方法)
核心规则回顾(基于JVM规范)
- 方法描述符格式:
(参数类型描述符序列)返回类型描述符,无返回值时返回类型用V - 引用类型(类/接口)描述符:
L全限定类名;,包名用/替代. - 泛型参数会被类型擦除,不体现在最终的描述符中
- 基本类型用单个字符表示(如规范示例中的
I代表int)
示例方法的描述符拆解
你的示例方法:callthismethod(String a, ArrayMap<String aa, Task<String aaa>> )
第一个参数:String
String的全限定类名是java.lang.String,对应描述符:Ljava/lang/String;第二个参数:ArrayMap<String, Task
> - 泛型擦除后,仅保留原始类型
ArrayMap - Task的全限定类名是
com.this.location.Task,但因泛型擦除,这个泛型参数不影响描述符 - 假设
ArrayMap的全限定类名为[你的包路径]/ArrayMap(比如如果是默认包则直接写ArrayMap),对应描述符为L[包路径替换为/分隔]/ArrayMap;
- 泛型擦除后,仅保留原始类型
最终完整描述符
假设方法无返回值,且ArrayMap的全限定类名为com/your/project/ArrayMap,则完整描述符为:
(Ljava/lang/String;Lcom/your/project/ArrayMap;)V
如果ArrayMap在默认包下,描述符为:
(Ljava/lang/String;LArrayMap;)V
内容的提问来源于stack exchange,提问作者Lyon
相关产品推荐
相关产品推荐

