Is there a way to compute a Java class's method's signature? A signature
like ([Ljava/lang/String;)V
represents a function that takes a String[]
as argument
and returns void
.
What's the rule to compute the signature?
Is there a way to compute a Java class's method's signature? A signature
like ([Ljava/lang/String;)V
represents a function that takes a String[]
as argument
and returns void
.
What's the rule to compute the signature?
A quick google search uncovered this webpage:
http://www.rgagnon.com/javadetails/java-0286.html
It's always a set of parentheses enclosing type signifiers for the arguments, one after the other with no commas or anything, followed by a type signifier for the return value after the closing paren. It's pretty straightforward.
There's a table of type signatures on this page:
Those last two mean that to name a class, you say, for example,
Ljava/lang/Object;
, and to name an array of (for example)int
, you say[I
, and an array of array ofint
is[[I
.If you wanted to literally compute the signature in Java code based on reflection, it'd be simple enough; just use the table above with rules for handling objects and arrays.
See here for some details.
Basically it's params, then return value.
Just run
javap -s <class-name>
in the folder containing the.class
files . It will tell you with 100% accuracy. No need to guess these things.You can find this information in the the Java Virtual Machine Specification
From the JLS, §8.4.2:
So the "rule" is