我用Javassist创建了一个没有实际方法的构造函数
CtConstructor c = CtNewConstructor.make ( argTypes, null, newClass );
当我试图推出这个类的签名时
c.getSignature();
我得到了
public Echo ()V
我很困惑“V”是什么意思?我期待公共Echo();或类似的东西...
答案 0 :(得分:44)
JVM使用一种存储方法签名的紧凑方式,其中构造函数被认为是一种特殊情况。
对于你的例子:
()
表示不带参数的方法V
表示它不返回任何内容该计划的其他部分是:
B
- byte C
- char D
- 双F
- float I
- int J
- 很长S
- 简短V
- void Z
- 布尔[
- 括号L
[班级名称] ;
- 此类的实例,点为斜线(
[args] )
[返回类型] - 方法签名例如:
public int foo(String bar, long[][] baz)
会变成
(Ljava/lang/String;[[J)I
请参阅Sun ^ H ^ H ^ HOracle网站上的spec
答案 1 :(得分:4)
“V”确定结果类型“void”
答案 2 :(得分:3)
类型签名中的V表示空类型。字节码不区分构造函数与其他方法(除了使用特殊方法名称)。