Cosa significa" () V " in una firma di classe?


Ho creato un costruttore con Javassist che non ha un metodo reale

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

Quando sto cercando di mettere fuori la firma di questa classe

c.getSignature();

Ottengo

public Echo ()V

Sono confuso cosa significa" V"? Mi aspettavo sia public Echo (); o qualcosa di simile...

Author: Evils, 2012-03-28

3 answers

La JVM utilizza un modo compatto di memorizzare le firme dei metodi, di cui i costruttori sono considerati un caso speciale.

Per il tuo esempio:

  • () indica un metodo che non accetta argomenti
  • V indica che non restituisce nulla

Le altre parti del regime sono:

  • B - byte
  • C - carattere
  • D - doppio
  • F - float
  • I - int
  • J - lungo
  • S - breve
  • V - vuoto
  • Z - booleano
  • [ - array della cosa che segue la parentesi
  • L [nome della classe] ; - istanza di questa classe, con i punti che diventano barre
  • ( [args] ) [tipo di ritorno] - firma del metodo

Per esempio:

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

Diventerebbe

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

Vedere le specifiche sul sito web di Sun^H^H ^ HOracle

 42
Author: Simon Nickerson, 2014-01-07 14:21:56

" V "determina il tipo di risultato"void"

 4
Author: Philip Helger, 2012-03-28 14:10:26

V in una firma di tipo significa tipo vuoto. Bytecode non differenzia i costruttori da altri metodi (diversi dall'utilizzo di un nome di metodo speciale).

 3
Author: Eugene Kuleshov, 2012-03-28 14:10:00