Puedes usar el getClass()
método para obtener el tipo de objeto que está utilizando:
Object obj = null;
obj = new ArrayList<String>();
System.out.println(obj.getClass());
obj = "dummy";
System.out.println(obj.getClass());
obj = 4;
System.out.println(obj.getClass());
Esto generará la siguiente salida:
class java.util.ArrayList
class java.lang.String
class java.lang.Integer
Como puede ver, mostrará el tipo de objeto al que hace referencia la variable, que podría no ser el mismo que el tipo de la variable (Object
en este caso).
Para los tipos primitivos no hay solución disponible ya que no existe el problema de conocer el tipo almacenado en una variable. Una variable de tipo primitivo puede contener solamente valores de ese tipo. Como tiene que definir la variable (o parámetro) en algún lugar, ya conoce el tipo y los valores que puede contener. No hay un tipo «base» para los valores primitivos que pueda utilizar de forma similar a la Object
type, que es el tipo base para todos los objetos en java.