java bytecode javassist

java - ¿Qué significa "() V" en una firma de clase?



bytecode javassist (3)

Creé un constructor con Javassist que no tiene un método real.

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

Cuando estoy tratando de poner la firma de esta clase.

c.getSignature();

yo obtengo

public Echo ()V

Estoy confundido que significa "V"? Esperaba ya sea público Echo (); o algo similar...


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


La JVM utiliza una forma compacta de almacenar firmas de métodos, de los cuales los constructores se consideran un caso especial.

Para su ejemplo:

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

Las otras partes del esquema son:

  • B - byte
  • C - char
  • D - doble
  • F - flotar
  • I - int
  • J - largo
  • S - corto
  • V - vacío
  • Z - booleano
  • [ - matriz de la cosa siguiendo el corchete
  • L [nombre de la clase] ; - instancia de esta clase, con puntos que se convierten en barras
  • ( [args] ) [tipo de retorno] - firma de método

Por ejemplo:

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

se convertiría

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

Vea la spec en el sitio web de Sun ^ H ^ H ^ HOracle


V en una firma de tipo significa tipo de vacío. Bytecode no diferencia a los constructores de otros métodos (aparte de usar un nombre de método especial).