¿Cómo determinar el tipo primitivo de una variable primitiva?

¿Hay una función tipo “typeof” en Java que devuelve el tipo de una variable de tipo de datos primitivo (PDT) o una expresión de operandos PDT?

instanceof parece funcionar solo para tipos de clase.

    Pruebe lo siguiente:

     int i = 20; float f = 20.2f; System.out.println(((Object)i).getClass().getName()); System.out.println(((Object)f).getClass().getName()); 

    Se imprimirá:

     java.lang.Integer java.lang.Float 

    En cuanto a instanceof , podría usar su homólogo dynamic Class#isInstance :

     Integer.class.isInstance(20); // true Integer.class.isInstance(20f); // false Integer.class.isInstance("s"); // false 

    Hay una manera fácil que no requiere el boxeo implícito, por lo que no te confundirás entre los primitivos y sus envoltorios. No se puede usar isInstance para tipos primitivos; por ejemplo, llamar a Integer.TYPE.isInstance(5) ( Integer.TYPE es equivalente a int.class ) devolverá false ya que 5 se autoboxa en un Integer antemano.

    La forma más fácil de obtener lo que desea (tenga en cuenta que técnicamente se realiza en tiempo de comstackción para primitivos, pero aún requiere la evaluación del argumento) es a través de la sobrecarga. Ver mi pasta ideone .

     ... public static Class typeof(final int expr) { return Integer.TYPE; } public static Class typeof(final long expr) { return Long.TYPE; } ... 

    Esto se puede usar de la siguiente manera, por ejemplo:

     System.out.println(typeof(500 * 3 - 2)); /* int */ System.out.println(typeof(50 % 3L)); /* long */ 

    Esto depende de la capacidad del comstackdor para determinar el tipo de expresión y elegir la sobrecarga correcta.