【发布时间】:2011-12-25 08:38:18
【问题描述】:
有没有办法计算 Java 类的方法签名?签名
像([Ljava/lang/String;)V 表示一个以String[] 作为参数的函数
并返回void。
计算签名的规则是什么?
【问题讨论】:
标签: java method-signature
有没有办法计算 Java 类的方法签名?签名
像([Ljava/lang/String;)V 表示一个以String[] 作为参数的函数
并返回void。
计算签名的规则是什么?
【问题讨论】:
标签: java method-signature
它始终是一组括号,其中包含参数的类型指示符,一个接一个,没有逗号或任何东西,在结束括号之后是返回值的类型指示符。这很简单。
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,你说[I,一个数组@ 987654326@ 是[[I。
如果您想在 Java 代码中基于反射逐字计算签名,这很简单;只需将上表与处理对象和数组的规则一起使用即可。
【讨论】:
只需在包含.class 文件的文件夹中运行javap -s <class-name>。它会以 100% 的准确率告诉你。不用猜这些。
【讨论】:
快速谷歌搜索发现了这个网页:
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 [
【讨论】:
有关详细信息,请参阅here。
基本上是参数,然后是返回值。
【讨论】:
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 Virtual Machine Specification找到此信息
【讨论】: