que no entiendo muy bien lo que está tratando de hacer, pero creo que hay algunas respuestas posibles, no obstante:
usted puede estar interesado en el JNI Method Descriptors, uno de los diversos string formats utilizados internamente por el JVM (y por las bibliotecas JNI) para identificar elementos de Java.
Es difícil saber de lo que está hablando. El "ID de método" puede ser una referencia para un objeto java.lang.reflect.Method
, o puede ser el descriptor de método mencionado a continuación, o cualquier otra cosa. ¿Dónde lo leíste?
Dudo que exista tal tabla dentro de la JVM. Quiero decir, dudo que exista una tabla global , porque casi siempre recuperas un métodode una clase, incluso cuando se trata de una JVM, por lo que es razonable creer que el método está almacenado en la clase.Es likewhen utilizamos la reflexión para recuperar un método:
Class clazz = String.class;
Method method = clazz.getDeclaredMethod("charAt", Integer.TYPE);
System.out.println(method.getName());
Nota que pido la clase String
para el método, en lugar de pedir alguna clase util para darme el método charAt
, que recibe una int
y es de la clase String
.
En otras palabras, su tupla de identificación es casi correcta - que simplemente no tiene una clase:
(methodName, methodParameters)
y, en lugar de recuperar el método de la JVM pasando la clase y luego el nombre del método y luego los tipos de parámetros, recupera el método directamente de la clase, dando a la clase el nombre del método y los tipos de parámetros. Una diferencia sutil, seguro, pero creo que es por lo que te estás preguntando.
Esto es evidente incluso en los descriptores de JNI que mencioné a continuación. Por ejemplo, el método
long f(int i, Class c);
está representado por la siguiente descriptor:
"(ILjava/lang/Class;)J"
Note que no hay ninguna referencia a la clase del método.
El excellent documentation on the class file format (ya señalado por @Lawence) puede proporcionarle algunas ideas. Te recomiendo que lo leas completamente.
Su pregunta es demasiado vaga. ¿Estás hablando de identificar el método en el compilador? En el archivo ".class"? En el programa de ejecución? –