Byte Buddy中internalName的准确定义是什么?
Byte Buddy中"internal name"的定义解析
Byte Buddy文档里频繁提到的internal name,确实是它自定义的术语,并不在JLS第6、13章或JVMS第4章的标准定义范畴内,而且和标准的binary name不是一回事——毕竟binary name仅适用于类和接口,而Byte Buddy的internal name还覆盖了方法、字段等场景。
你的初步猜测完全正确:Byte Buddy的internal name就是指.class文件解码后,字节码层面直接使用的原生名称格式,覆盖所有可命名的字节码元素:
- 类/接口:使用斜杠
/替代点.的全限定名,比如java/lang/Class(对应源码里的java.lang.Class) - 方法/字段:就是字节码里的原始名称,比如方法
toString、字段name,甚至编译器生成的特殊方法<init>(构造方法)、<clinit>(静态初始化方法)都属于这类 - 数组类型:遵循JVMS的数组字节码表示规则,比如
[Ljava/lang/String;对应String[],[I对应int[],这就是数组的internal name
Byte Buddy引入这个术语的核心原因,是为了统一指代所有字节码层面的原生名称——标准的binary name只能覆盖类/接口,没法适配方法、字段的场景,而internal name可以作为一个通用概念,描述所有字节码元素在.class文件里的真实名称形式。
内容的提问来源于stack exchange,提问作者Laird Nelson
相关产品推荐
相关产品推荐

