有没有办法计算 Java类的方法签名?签名
像([Ljava/lang/String;)V
一样代表一个以String[]
为参数的函数
并返回void
。
计算签名的规则是什么?
答案 0 :(得分:41)
它始终是一组括号,用于为参数括起类型的表示符,一个接一个地没有逗号或任何内容,后面跟一个类型的表示符,用于关闭paren之后的返回值。这很简单。
上有一个类型签名表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代码中实际计算签名,那么它就足够简单了;只需使用上表中的规则来处理对象和数组。
答案 1 :(得分:9)
只需在包含javap -s <class-name>
文件的文件夹中运行.class
即可。它会100%准确地告诉你。无需猜测这些事情。
答案 2 :(得分:4)
快速谷歌搜索发现了这个网页:
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 [
答案 3 :(得分:1)
有关详细信息,请参阅here。
基本上它是params,然后返回值。
答案 4 :(得分:1)
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
。
所以“规则”是
方法的名称以及方法的形式参数的数量和类型
答案 5 :(得分:1)