计算Java函数';签名

计算Java函数';签名,java,method-signature,Java,Method Signature,是否有方法计算Java类的方法签名?签名 like([Ljava/lang/String;)V表示将字符串[]作为参数的函数 并返回void 计算签名的规则是什么?始终是一组括号,其中包含参数的类型表示符,一个接一个,没有逗号或任何东西,然后是结束参数后返回值的类型表示符。这非常简单 上面有一个类型签名表 最后两个意思是,要命名一个类,你可以说,例如,Ljava/lang/Object;,要命名一个数组(例如)int,你可以说[I,而int的数组是[[I 如果你想在Java代码中基于反射计算签名

是否有方法计算Java类的方法签名?签名
like
([Ljava/lang/String;)V
表示将
字符串[]
作为参数的函数
并返回
void


计算签名的规则是什么?

始终是一组括号,其中包含参数的类型表示符,一个接一个,没有逗号或任何东西,然后是结束参数后返回值的类型表示符。这非常简单

上面有一个类型签名表

最后两个意思是,要命名一个类,你可以说,例如,
Ljava/lang/Object;
,要命名一个数组(例如)
int
,你可以说
[I
,而
int
的数组是
[[I


如果你想在Java代码中基于反射计算签名,那就足够简单了;只需使用上面的表和处理对象和数组的规则。

谷歌快速搜索发现了这个网页:

签名分为两部分。第一部分用括号括起来,表示方法的参数。第二部分在右括号后面,表示返回类型。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
方法 使用相同的签名。这是一个错误,即使 声明是抽象的

所以“规则”是

方法的名称,以及方法的形式参数的数量和类型


您可以在包含
.class
文件的文件夹中运行
javap-s
就可以在中找到这些信息。它将100%准确地告诉您。无需猜测这些内容。

我是否误解了这个问题?我想OP是在谈论速记版本中使用的实际字符,尽管它没有解释冷冰冰地说,这使得下一票有点苛刻。在我看来,这有点讽刺,OP询问签名,但提供的“速记”示例没有包括任何关于方法名称的内容。是的,我认为签名和描述符之间有一些混淆,但是嘿。
class Point implements Move {
  int x, y;
  abstract void move(int dx, int dy);
  void move(int dx, int dy) { x += dx; y += dy; }
}