Evils
Evils

Reputation: 887

What does "()V" mean in a class signature?

I created a constructor with Javassist which has no real method

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

When I'm trying to put out the signature of this class

c.getSignature();

I get

public Echo ()V

I'm confused what "V" means? I expected either public Echo (); or something similar...

Upvotes: 29

Views: 12572

Answers (3)

Simon Nickerson
Simon Nickerson

Reputation: 43169

The JVM uses a compact way of storing method signatures, of which constructors are considered a special case.

For your example:

  • () indicates a method taking no arguments
  • V indicates that it returns nothing

The other parts of the scheme are:

  • B - byte
  • C - char
  • D - double
  • F - float
  • I - int
  • J - long
  • S - short
  • V - void
  • Z - boolean
  • [ - array of the thing following the bracket
  • L [class name] ; - instance of this class, with dots becoming slashes
  • ( [args] ) [return type] - method signature

For example:

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

would become

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

See the spec at Sun^H^H^HOracle's web site

Upvotes: 64

Philip Helger
Philip Helger

Reputation: 1864

"V" determines the result type "void"

Upvotes: 7

Eugene Kuleshov
Eugene Kuleshov

Reputation: 31795

V in a type signature means void type. Bytecode does not differentiate constructors from other methods (other than using special method name).

Upvotes: 5

Related Questions