¿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()
.