2011-12-01 18 views
13

Recibí esta excepción pero la resolví.Comprender la firma del método en la excepción NoSuchMethod

java.lang.NoSuchMethodError: antlr.NoViableAltForCharException.<init> 
(CLjava/lang/String;II)V 

pero me gustaría saber cómo interpretar este tipo de mensajes: "(CLjava/lang/cadena; II) V" Además, ¿este "init" menciona el constructor de la clase NoViableAltForCharException ??

Gracias.

Respuesta

26

Firmas de tipo - tomadas de this page.

El JNI utiliza la representación de las firmas de tipos de la máquina virtual de Java. La Tabla 3-2 muestra estas firmas de tipo.

Z        boolean 
B        byte 
C        char 
S        short 
I        int 
J        long 
F        float 
D        double 
L fully-qualified-class ;  fully-qualified-class 
[ type       type[] 
(arg-types) ret-type   method type 

Por ejemplo, el método de Java:

long f (int n, String s, int[] arr); 

tiene el siguiente tipo de firma:

(ILjava/lang/String;[I)J 
7

Está buscando un constructor antlr.NoViableAltForCharException(char, String, int, int) pero no lo encuentra en la clase.

El método <init> es el constructor y el método <cinit> es el bloque de inicialización estático. Los tipos de parámetros se enumeran por @gkamal con la adición de que V es nulo. En teoría, los constructores devuelven void, que es el motivo del V al final de la firma.

Por cierto: Es quizás irónico que J es por mucho tiempo y L es para la clase, cuando podría haber sido L por mucho tiempo y J de clase Java. ;)

+1

Creo que el póster está buscando cómo interpretarlo, y no la interpretación real. – gnomed

+0

Gracias Peter, tu respuesta fue útil tanto en la firma del método como en el método init. – popcoder

2

Ver el types docs. Es una notación abreviada conveniente.

0

usted podría tener un archivo .jar obsoleta en el servidor vs lo que eres compilando tu código con. Verifique que todos los archivos .jar en el servidor sean los mismos que los que está compilando.

Cuestiones relacionadas