计算Java函数的签名

时间:2011-11-09 14:11:17

标签: java method-signature

有没有办法计算 Java类的方法签名?签名
([Ljava/lang/String;)V一样代表一个以String[]为参数的函数 并返回void

计算签名的规则是什么?

6 个答案:

答案 0 :(得分:41)

它始终是一组括号,用于为参数括起类型的表示符,一个接一个地没有逗号或任何内容,后面跟一个类型的表示符,用于关闭paren之后的返回值。这很简单。

this page:

上有一个类型签名表
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的数组,你说[Iint数组的数组是[[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)

来自the JLS, §8.4.2

  

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)

您可以在Java Virtual Machine Specification

中找到此信息