我发现原始类型问题
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));
这两个语句都向调用者返回false。因此看来拳击不适用于这里。我的问题是,我的观察是否正确,或者还有其他API可以正确执行此测试?
--------------------------------跟进---------------- -----------------------------
就像我说的那样,我主要想检查使用反射时对象是否可分配给字段。我希望该机制可以在运行时更加精确,因此我实现了这样的实现。
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());
}
}
看来我能做的最好-_-!谢谢
最佳答案
我想,来自Apache commons-lang的ClassUtils.isAssignable(Class, Class, boolean)
是帮助您的人。
JavaDoc