java reflection primitive-types boxing

¿Int.class es igual a Integer.class o Integer.TYPE en Java?



reflection primitive-types (2)

Basado en Field.getType() (en lugar de f.getDeclaringClass() ), obtengo lo siguiente:

Type: java.lang.Integer equals(Integer.class): true equals(int.class) : false equals(Integer.TYPE) : false == (Integer.class) : true == (int.class) : false == (Integer.TYPE) : false Type: int equals(Integer.class): false equals(int.class) : true equals(Integer.TYPE) : true == (Integer.class) : false == (int.class) : true == (Integer.TYPE) : true Type: java.lang.Object equals(Integer.class): false equals(int.class) : false equals(Integer.TYPE) : false == (Integer.class) : false == (int.class) : false == (Integer.TYPE) : false

Lo que significa que lo siguiente es cierto:

Integer.TYPE.equals(int.class) Integer.TYPE == int.class

Es decir, si quiero saber si estoy tratando con un int o un Integer , puedo usar cualquiera de las siguientes pruebas:

isInteger = c.equals(Integer.class) || c.equals(Integer.TYPE); isInteger = c.equals(Integer.class) || c.equals(int.class); isInteger = (c == Integer.class) || (c == Integer.TYPE); isInteger = (c == Integer.class) || (c == int.class );

¿Hay algún caso en la esquina que me falta? Si es así, por favor comente.

Imaginemos que uno recupera el tipo de declaración de un Field usando la reflexión.

¿Cuál de las siguientes pruebas indicará correctamente si se está tratando con un int o un Integer ?

Field f = ... Class<?> c = f.getDeclaringClass(); boolean isInteger; isInteger = c.equals(Integer.class); isInteger = c.equals(Integer.TYPE); isInteger = c.equals(int.class); isInteger = ( c == Integer.class); isInteger = ( c == Integer.TYPE); isInteger = ( c == int.class);


int.class compila hasta Integer.TYPE . Sin embargo, creo que está utilizando Field.getDeclaringClass() incorrectamente, ya que esto devuelve el objeto Class que representa la clase que declara el campo. Lo que desearía usar es Field.getType() .