有没有办法计算Java 类的方法签名?签名
like([Ljava/lang/String;)V
表示以 aString[]
作为参数
并返回的函数void
。
计算签名的规则是什么?
有没有办法计算Java 类的方法签名?签名
like([Ljava/lang/String;)V
表示以 aString[]
作为参数
并返回的函数void
。
计算签名的规则是什么?
它始终是一组括号,其中包含参数的类型指示符,一个接一个,没有逗号或任何东西,然后是结束括号后的返回值的类型指示符。这很简单。
此页面上有一个类型签名表:
Signature Java Type
Z boolean
B byte
C char
S short
I int
J long
F float
D double
V void
L fully-qualified-class ; fully-qualified-class
[ type type[]
最后两个意味着要命名一个类,例如,你说,Ljava/lang/Object;
并命名一个数组(例如)int
,你说[I
,和一个数组的数组int
是[[I
。
如果您想根据反射从字面上计算Java 代码中的签名,那就很简单了;只需将上表与处理对象和数组的规则一起使用。
Just run javap -s <class-name>
in the folder containing the .class
files . It will tell you with 100% accuracy. No need to guess these things.
一个快速的谷歌搜索发现了这个网页:
http://www.rgagnon.com/javadetails/java-0286.html
签名有两个部分。第一部分用括号括起来,表示方法的参数。第二部分跟在右括号之后,代表返回类型。Java类型和C类型之间的映射是
Type Chararacter boolean Z byte B char C double D float F int I long J object L short S void V array [
请参阅此处了解一些详细信息。
基本上它是参数,然后是返回值。
8.4.2 方法签名
方法的签名由方法的名称和方法的形式参数的数量和类型组成。一个类不能声明具有相同签名的两个方法,否则会发生编译时错误。
这个例子:
class Point implements Move { int x, y; abstract void move(int dx, int dy); void move(int dx, int dy) { x += dx; y += dy; } }
导致编译时错误,因为它声明了
move
具有相同签名的两个方法。这是一个错误,即使其中一个声明是abstract
.
所以“规则”是
方法的名称以及该方法的形式参数的数量和类型
您可以在Java 虚拟机规范中找到此信息