我用 Javassist 创建了一个没有真正方法的构造函数
CtConstructor c = CtNewConstructor.make ( argTypes, null, newClass );
当我试图发出这个类的签名时
c.getSignature();
我明白了
public Echo ()V
我很困惑“V”是什么意思?我期望要么 public Echo (); 或类似的东西...
JVM 使用一种紧凑的方式来存储方法签名,其中构造函数被认为是一种特殊情况。
对于您的示例:
()
表示不带参数的方法V
表示它什么也不返回该计划的其他部分是:
B
- 字节C
- 字符D
- 双倍的F
- 漂浮I
- 整数J
- 长S
- 短的V
- 空白Z
- 布尔值[
- 括号后面的东西的数组L
[类名] ;
- 这个类的实例,点变成斜线(
[args] )
[返回类型] - 方法签名例如:
public int foo(String bar, long[][] baz)
会成为
(Ljava/lang/String;[[J)I
请参阅Sun^H^H^HOracle 网站上的规范
“V”确定结果类型“void”
类型签名中的 V 表示 void 类型。字节码不区分构造函数和其他方法(除了使用特殊的方法名)。