2012-03-28 15 views
15

stworzyłem konstruktora z Javassist który nie ma realnego sposobuCo oznacza "() V" w podpisie klasy?

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

Kiedy staram się ugasić podpis tej klasy

c.getSignature(); 

uzyskać

public Echo()V 

I "m zdezorientowany co oznacza" V "? Spodziewałem się publicznego Echo(); lub coś podobnego ...

Odpowiedz

36

JVM używa kompaktowy sposób przechowywania podpisów metody, z których konstruktorzy są uważane za szczególny przypadek.

Dla przykładu:

  • () wskazuje sposób ze sobą nie argumenty
  • V wskazuje, że nic nie zwraca

Pozostałe części programu są:

  • B - bajt
  • C - char
  • D - podwójne
  • F - unosić
  • I - int
  • J - długo
  • S - krótki
  • V - nieważne
  • Z - logiczna
  • [ - tablicę rzeczą po wsporniku
  • L [nazwa klasy] ; - przykład tej klasy z kropek staje ukośnikami
  • ( [arg] ) [rodzaj powrotu] - podpis Sposób

na przykład:

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

staną

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

Zobacz spec na stronie internetowej Sun^H^H^HOracle za

+0

Czy możesz mi powiedzieć, co '^ H^H^H' część środków? –

+11

To była kiepska próba żartu. Zobacz http://en.wikipedia.org/wiki/Backspace#.5EH –

+0

:) Nie Wiem, że chciałeś usunąć poprzednie trzy znaki. Dzięki za link! :) –

3

V w podpisie typu oznacza nieważny typ. Bajtek nie rozróżnia konstruktorów od innych metod (innych niż przy użyciu specjalnej nazwy metody).

3

„V” określa typ wyniku „void”