For example for class
class A {
void foo(int a,int b) { ... }
}
I would like to get string .../A/foo(II)V for method 'foo' . I haven't
found any appropriate methods to do it.
--dima
If you have easy access the bytecode, the program `javap' can print out
the signature for the method (foo(II)V).
Barring that, it is pretty easy to transform a
java.lang.reflect.Method's toString() to a JVM internal String.
--
Beware of bugs in the above code; I have only proved it correct, not
tried it. -- Donald E. Knuth
I believe that this information is not available in the standard Java
API. Haven't followed late changes though..
To get this info, I'm using the Apache BCEL library
(http://jakarta.apache.org/bcel/):
$ cat SignatureLister.java
import java.io.*;
import org.apache.bcel.*;
import org.apache.bcel.classfile.*;
import org.apache.bcel.generic.*;
import org.apache.bcel.util.*;
public class SignatureLister {
public static void main(String args[]) throws IOException {
ClassParser parser = new ClassParser(args[0]);
JavaClass clazz = parser.parse();
Method[] methods = clazz.getMethods();
for(int i=0; i<methods.length; i++) {
System.out.print(clazz.getClassName());
System.out.print(".");
System.out.print(methods[i].getName());
System.out.println(methods[i].getSignature());
}
}
}
$ javac -classpath bcel-5.2.jar SignatureLister.java
$ $ java -cp bcel-5.2.jar:. SignatureLister A.class
A.<init>()V
A.foo(II)V
br,
Pietu
--dima