Let\'s imagine one retrieves the declaring type of a Field
using reflection.
Which of the following tests will correctly indicate whether one is dealing
int.class
compiles down to Integer.TYPE
. However, I think you are using Field.getDeclaringClass() incorrectly, as this returns the Class
object representing the class that declares the field. What you would want to use is Field.getType().
Based on Field.getType()
(instead of f.getDeclaringClass()
), I get the following:
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
Meaning the following is true:
Integer.TYPE.equals(int.class)
Integer.TYPE == int.class
Meaning if I want to find out whether I am dealing with an int
or an Integer
, I can use any of the following tests:
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 );
Is there a corner case I am missing? If yes, please comment.