Why does Void class exist in JDK

DZone 's Guide to

Why does Void class exist in JDK

· Java Zone ·
Free Resource

I always try to bring some thing new and useful on this blog. This time we will understand the Void.class (which in itself looks something tricky) present in rt.jar.

One can consider the java.lang.Void class as a wrapper for the keyword void.
Some developers draw the analogy with the primitive data types int, long, short and byte etc. which have the wrapper classes as Integer, Long, Short and Byte receptively. But it should be kept in mind that unlike those wrappers Void class doesn't store a value of type void in itself and hence is not a wrapper in true essence.


The Void class according to javadoc exists because of the fact that some time we may need to represent the void keyword as an object. But at the same point we cannot create an instance of the Void class using the new operator.
This is because the constructor in Void has been declared as private.
Moreover the Void class is a final class which means that there is no way we can inherit this class.

So the only purpose that remains for the existence of the Void class is reflection, where we can get the return type of a method as void. The following piece of code will demonstrate this purpose:

public class Test {
public static void main(String[] args) throws SecurityException, NoSuchMethodException {
Class c1 = Test1.class.getMethod("Testt",null).getReturnType();
System.out.println(c1 == Void.TYPE);
System.out.println(c1 == Void.class);

class Test1{
public void Testt(){}

One can also use Void class in Generics to specify that you don't care about the specific type of object being used. For example:

List<void> list1;


From http://extreme-java.blogspot.com/2011/04/void-class-java.html


Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}