I find primitive type problem
System.out.println("Integer.class.isAssignableFrom(int.class) = " + Integer.class.isAssignableFrom(int.class)); System.out.println("int.class.isAssignableFrom(Integer.class) = "+int.class.isAssignableFrom(Integer.class)); both of the statements return false to the caller. so that seems like boxing is not applicable here. My question is if my observation is correct or there are other API who can do this testing correctly?
--------------------------------following up---------------------------------------------
As I said, I mainly want to check if a Object is assignable to a Field when using reflection. I hope the mechanism could be more precise at run time so I made a implementation like this.
public static boolean isAssignableFrom(final Field field, final Object obj) { if (field.getType().equals(Integer.class) || field.getType().equals(int.class)) { return obj.getClass().equals(Integer.class) || field.getType().equals(int.class); } else if (field.getType().equals(Float.class) || field.getType().equals(float.class)) { return obj.getClass().equals(Float.class) || field.getType().equals(float.class); } else if (field.getType().equals(Double.class) || field.getType().equals(double.class)) { return obj.getClass().equals(Double.class) || field.getType().equals(double.class); } else if (field.getType().equals(Character.class) || field.getType().equals(char.class)) { return obj.getClass().equals(Character.class) || field.getType().equals(char.class); } else if (field.getType().equals(Long.class) || field.getType().equals(long.class)) { return obj.getClass().equals(Long.class) || field.getType().equals(long.class); } else if (field.getType().equals(Short.class) || field.getType().equals(short.class)) { return obj.getClass().equals(Short.class) || field.getType().equals(short.class); } else if (field.getType().equals(Boolean.class) || field.getType().equals(boolean.class)) { return obj.getClass().equals(Boolean.class) || field.getType().equals(boolean.class); } else if (field.getType().equals(Byte.class) || field.getType().equals(byte.class)) { return obj.getClass().equals(Byte.class) || field.getType().equals(byte.class); } return field.getType().isAssignableFrom(obj.getClass()); } } That seems the best I can do -_-! thanks
isAssignableFrommethod operates on. Key thing to keep in mind is - instances can be autoboxed, classes cannot.