I find a 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 statements return false to the caller. so it seems that boxing is not applicable here. My question is, is my observation correct or is there another API that can correctly perform this testing?
-------------------------------- continued ------------- ---- ----------------------------
As I said, I basically want to check if Object can be assigned to a field when using reflection. I hope the mechanism can be more accurate at runtime, so I made such an implementation.
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()); } }
It seems the best I can do -_-! thanks
source share