que print detail java exception stack-trace

java - print - ¿Qué significa esto en un seguimiento de pila?



stack trace java (4)

Veo esto en un rastro de pila:

myorg.vignettemodules.customregistration.NewsCategoryVAPDAO.getEmailContentByID (I) Lmyorg / pushemail / model / EmailContent;

¿Qué significa " (I)L "?


Es una forma de manipulación de nombres utilizada para la eliminación de sobrecargas de métodos. El nombre del método se agrega mediante una serie de caracteres que describen los parámetros y el tipo de retorno: los parámetros aparecen secuencialmente entre paréntesis, y el tipo de retorno sigue al paréntesis de cierre. Los códigos son los siguientes:

  • Z : boolean
  • B : byte
  • C : char
  • S : short
  • I : int
  • J : long
  • F : float
  • D : double
  • L nombre de clase completamente calificado ; : clase completamente calificada
  • [ tipo : array de tipo
  • V : void

Entonces, en su caso, el (I)Lmyorg/pushemail/model/EmailContent; significa que el método toma un argumento de tipo int y devuelve un objeto de tipo myorg.pushemail.model.EmailContent .


Es un punto menor, pero no creo que esto sea un cambio de nombre. El cambio de nombre implica agregar cosas adicionales a un nombre. ZBC, etc. es la forma en que java codifica las firmas de métodos en los archivos de clase. En lugar de escribir boolean, ponen una Z. Ahorra espacio.

Según la wikipedia (se aplica el descargo de responsabilidad estándar), el único nombre que se traduce en Java implica clases internas y JNI.


Significa que el método toma un int y devuelve myorg.pushemail.model.EmailContent

La cadena de "L" a ";" es un descriptor de tipo, para el tipo de devolución. Lo que está entre paréntesis son los parámetros del método (en este caso, solo hay uno).

Estas descripciones de tipo se definen como parte de la especificación de máquina virtual de Java, en la sección 4.3.2 . La Tabla 4.3-A muestra todos los códigos utilizados. Cuando se compila una clase, los descriptores de este formulario se utilizan para especificar la firma de los métodos y los tipos de campos y variables.

En la serialización de Java, los descriptores de métodos forman parte de la información que es hash para formar el serialVersionUID predeterminado para una clase Serializable .

En RMI, los descriptores de método son hash, y el resultado se usa para identificar qué método se invoca en la interfaz remota.


Dice que no hay ningún método en la clase myorg.vignettemodules.customregistration.NewsCategoryVAPDAO llamado getEmailContentByID que acepte los argumentos int [denotados por (I)] y devuelva un objeto (anunciado por L) llamado myorg/pushemail/model/EmailContent (cerrado por '';'').

El carácter L e I se usa para indicar un nombre de clase y un número entero en la especificación de clase interna de Java.