61

I am not clear with the class java.lang.Void in Java. Can anybody elaborate in this with an example.

Johannes Schaub - litb
  • 466,055
  • 116
  • 851
  • 1,175
giri
  • 24,958
  • 61
  • 134
  • 175

4 Answers4

61

It also contains Void.TYPE, useful for testing return type with reflection:

public void foo() {}
...
if (getClass().getMethod("foo").getReturnType() == Void.TYPE) ...
axtavt
  • 228,184
  • 37
  • 489
  • 472
50

Say you want to have a generic that returns void for something:

abstract class Foo<T>
{
    abstract T bar();
}

class Bar
    extends Foo<Void>
{
    Void bar()
    {
        return (null);
    }
}
TofuBeer
  • 58,140
  • 15
  • 111
  • 160
1

Actually there is a pragmatic case where void.class is really useful. Suppose you need to create an annotation for class fields, and you need to define the class of the field to get some information about it (in example, if the field is an enum, to get list of potential values). In that case, you would need something like this:

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PropertyResourceMapper
{
    public Class acceptedValues() default void.class;
}

to be used like this:

@PropertyResourceMapper(acceptedValues = ImageFormat.class, description = "The format of     the image (en example, jpg).")
private ImageFormat format;

I have used this to create a custom serializer of classes to a proprietary format.

juancancela
  • 185
  • 10
-2

From the Java docs:

public final class Void
extends Object

The Void class is an uninstantiable placeholder class to hold a reference to the Class object representing the Java keyword void.

static Class<Void> TYPE 

The Class object representing the primitive Java type void.

TYPE
public static final Class<Void> TYPE

The Class object representing the primitive Java type void.

Arulraj
  • 59
  • 1
  • 9
    This is just a copy+paste of the documentation, not a real answer. – WhyNotHugo Sep 15 '11 at 16:36
  • 1
    @Hugo That is true, but I still found this to be the most useful answer. Other answers sidestep why it exists. It is the Class representation of a primitive type. Like Integer or Double. – scottbot95 Oct 22 '13 at 07:29
  • 1
    You should also mention that the only term that inhabits Void is null. – Prof Mo Feb 22 '14 at 16:11