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