2012-03-28 20 views
15

creé un constructor con Javassist que no tiene un verdadero método¿Qué significa "() V" en una firma de clase?

CtConstructor c = CtNewConstructor.make (argTypes, null, newClass); 

Cuando estoy tratando de apagar la firma de esta clase

c.getSignature(); 

consigo

public Echo()V 

I Estoy confundido con lo que "V" significa? Esperaba que Echo público(); o algo similar ...

Respuesta

36

La JVM utiliza una forma compacta de almacenamiento de firmas de método, de los que los constructores se consideran un caso especial.

Para su ejemplo:

  • () indica un método sin argumentos
  • V indica que no devuelve nada

Las otras partes del esquema son:

  • B - byte
  • C - charla
  • D - doble
  • F - float
  • I - int
  • J - larga
  • S - corta
  • V - vacío
  • Z - booleano
  • [ - matriz de la cosa siguiente el soporte
  • L [nombre de la clase] ; - instancia de esta clase, con puntos convertirse barras
  • ( [args] ) [tipo de retorno] - firma del método

Por ejemplo:

public int foo(String bar, long[][] baz) 

se convertiría en

 
(Ljava/lang/String;[[J)I 

Véase el spec en el sitio web de Sun^H^H^HOracle de

+0

¿Puede por favor dígame lo que significa parte '^ H^H^H'? –

+11

Fue un intento cojo en una broma. Ver http://en.wikipedia.org/wiki/Backspace#.5EH –

+0

:) No, sé que quisiste borrar esos tres personajes anteriores. Gracias por el enlace! :) –

3

V en un tipo de firma significa tipo vacío. Bytecode no diferencia a los constructores de otros métodos (que no sean el uso de un nombre de método especial).

3

"V" determina el tipo de resultado "vacío"

Cuestiones relacionadas