Get type of an object with an object of null?

Monte Carlo picture Monte Carlo · Dec 4, 2013 · Viewed 12.3k times · Source

The following code does compile, but why do I get a run time exception?

String b = null;
System.out.println(b.getClass());

Error I get is

java.lang.NullPointerException

How can I get the type of the object even if it's set to null?

Edit I realize there is no object present, but there still is an object b of type String. Even if it holds no object, it still has a type. How do I get at the type of an object, regardless of if it holds an object or if it does not.

Answer

Sotirios Delimanolis picture Sotirios Delimanolis · Dec 4, 2013

When you have

String b = null;

what you actually have is a variable of reference type String that is referencing null. You cannot dereference null to invoke a method.

With local variables you cannot do what you are asking.

With member variables, you can use reflection to find the declared type of the field.

Field field = YourClass.class.getDeclaredField("b");
Class<?> clazz = field.getType(); // Class object for java.lang.String