Is there a way to output the java data type to the console?

JavaTypesCasting

Java Problem Overview


I'm trying to debug a program I inherited. This program contains Strings, array lists and collections, lots of casting between types, and I need to do some String manipulations (substring, etc.)

The data look like Strings when printed to the console (e.g., it's a line of text, like Johnson, John or Chicago Region), but my code is erroring out with various index out of range errors, suggesting that my code to cast to String isn't working.

I'd like to try to figure out what data types are coming into and leaving my methods to verify that the program is acting as expected. Is there any way to find a field type in Java? In a perfect world, I could generate console output at every step that would give me the data value and whether it's a String, array list, or collection. Can that be done?

Java Solutions


Solution 1 - Java

Given an instance of any object, you can call it's getClass() method to get an instance of the Class object that describe the type of the object.

Using the Class object, you can easily print it's type name:

Integer number=Integer.valueOf(15);
System.out.println(number.getClass().getName());

This print to console the fully qualified name of the class, which for the example is:

java.lang.Integer

If you want a more concise output, you can use instead:

Integer number=Integer.valueOf(15);
System.out.println(number.getClass().getSimpleName());

getSimpleName() give you only the name of the class:

Integer

Printing the type of primitive variables is a bit more complex: see this SO question for details.

Solution 2 - Java

For any object x, you could print x.getClass().

Solution 3 - Java

instance.getClass() is the way to go if you just want to print the type. You can also use instanceof if you want to branch the behaviour based on type e.g.

if ( x instanceof String )
{
   // handle string
}

Solution 4 - Java

Use the getClass() method.

Object o;
System.out.println(o.getClass());

Solution 5 - Java

Just do .class.getName(); in any object

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questiondwwilson66View Question on Stackoverflow
Solution 1 - JavaAndrea ParodiView Answer on Stackoverflow
Solution 2 - JavaKeith RandallView Answer on Stackoverflow
Solution 3 - JavaMartinView Answer on Stackoverflow
Solution 4 - JavaeabrahamView Answer on Stackoverflow
Solution 5 - JavaIsmaelView Answer on Stackoverflow