Que signifie "() V " dans une signature de classe?


J'ai créé un constructeur avec Javassist qui n'a pas de vraie méthode

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

Quand j'essaie de mettre la signature de cette classe

c.getSignature();

Je reçois

public Echo ()V

Je suis confus ce que" V " signifie? Je m'attendais à Public Echo (); ou quelque chose de similaire...

Author: Evils, 2012-03-28

3 answers

La JVM utilise un moyen compact de stocker les signatures de méthode, dont les constructeurs sont considérés comme un cas particulier.

Pour votre exemple:

  • () indique une méthode ne prenant aucun argument
  • V indique qu'il ne renvoie rien

Les autres parties du schéma sont:

  • B - octet
  • C - char
  • D - double
  • F float
  • I - int
  • J - longue
  • S - court -
  • V - vide
  • Z - booléen
  • [ - tableau de la chose suivant le support
  • L [nom de classe] ; - instance de cette classe, les points devenant des barres obliques
  • ( [args] ) [type de retour] - signature de la méthode

Par exemple:

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

Deviendrait

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

Voir spec, au Soleil^H^H^HOracle le site web de

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

"V" détermine le type de résultat "nul",

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

V dans une signature de type signifie type vide. Bytecode ne différencie pas les constructeurs des autres méthodes (autres que l'utilisation d'un nom de méthode spécial).

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