2012-03-28 8 views
15

Ho creato un costruttore con Javassist che non ha un vero e proprio metodoCosa significa "() V" in una firma di classe?

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

Quando sto cercando di mettere la firma di questa classe

c.getSignature(); 

ottengo

public Echo()V 

I sono confuso cosa significa "V"? Mi aspettavo un'eco pubblica(); o qualcosa di simile ...

risposta

36

JVM utilizza un modo compatto di memorizzazione di firme di metodo, di cui costruttori sono considerati un caso speciale.

Per esempio:

  • () indica un metodo di prendere senza argomenti
  • V indica che non restituisce niente

Le altre parti del sistema sono:

  • B - byte
  • C - char
  • D - doppia
  • F - galleggiare
  • I - int
  • J - lungo
  • S - breve
  • V - vuoto
  • Z - booleana
  • [ - serie della cosa dopo la parentesi
  • L [nome della classe] ; - un'istanza di questa classe, con i puntini di diventare barre
  • ( [args] ) [tipo di ritorno] - firma del metodo

per esempio:

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

sarebbe diventato

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

Vedere il spec al sito Web di Sun^H^H^di Oracolo

+0

Può cortesemente dirmi cosa ': parte^H^H^H'? –

+11

È stato un tentativo zoppo di scherzare. Vedi http://en.wikipedia.org/wiki/Backspace#.5EH –

+0

:) No, so che intendevi cancellare quei tre caratteri precedenti. Grazie per il link! :) –

3

V in un tipo di firma significa tipo vuoto. Bytecode non distingue i costruttori da altri metodi (oltre all'utilizzo del nome del metodo speciale).

3

"V" determina il tipo di risultato "vuoto"

Problemi correlati