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...
17
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