revised "ClassUtils.isAssignable" semantics to cover primitives vs wrappers in both directions (SPR-7610)
This commit is contained in:
parent
9008e08171
commit
d9b54a524d
|
|
@ -809,8 +809,22 @@ public abstract class ClassUtils {
|
||||||
public static boolean isAssignable(Class<?> lhsType, Class<?> rhsType) {
|
public static boolean isAssignable(Class<?> lhsType, Class<?> rhsType) {
|
||||||
Assert.notNull(lhsType, "Left-hand side type must not be null");
|
Assert.notNull(lhsType, "Left-hand side type must not be null");
|
||||||
Assert.notNull(rhsType, "Right-hand side type must not be null");
|
Assert.notNull(rhsType, "Right-hand side type must not be null");
|
||||||
return (lhsType.isAssignableFrom(rhsType) ||
|
if (lhsType.isAssignableFrom(rhsType)) {
|
||||||
lhsType.equals(primitiveWrapperTypeMap.get(rhsType)));
|
return true;
|
||||||
|
}
|
||||||
|
if (lhsType.isPrimitive()) {
|
||||||
|
Class resolvedPrimitive = primitiveWrapperTypeMap.get(rhsType);
|
||||||
|
if (resolvedPrimitive != null && lhsType.equals(resolvedPrimitive)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Class resolvedWrapper = primitiveTypeToWrapperMap.get(rhsType);
|
||||||
|
if (resolvedWrapper != null && lhsType.isAssignableFrom(resolvedWrapper)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -227,6 +227,21 @@ public class ClassUtilsTests extends TestCase {
|
||||||
InnerClass.overloadedCalled);
|
InnerClass.overloadedCalled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testIsAssignable() {
|
||||||
|
assertTrue(ClassUtils.isAssignable(Object.class, Object.class));
|
||||||
|
assertTrue(ClassUtils.isAssignable(String.class, String.class));
|
||||||
|
assertTrue(ClassUtils.isAssignable(Object.class, String.class));
|
||||||
|
assertTrue(ClassUtils.isAssignable(Object.class, Integer.class));
|
||||||
|
assertTrue(ClassUtils.isAssignable(Number.class, Integer.class));
|
||||||
|
assertTrue(ClassUtils.isAssignable(Number.class, int.class));
|
||||||
|
assertTrue(ClassUtils.isAssignable(Integer.class, int.class));
|
||||||
|
assertTrue(ClassUtils.isAssignable(int.class, Integer.class));
|
||||||
|
assertFalse(ClassUtils.isAssignable(String.class, Object.class));
|
||||||
|
assertFalse(ClassUtils.isAssignable(Integer.class, Number.class));
|
||||||
|
assertFalse(ClassUtils.isAssignable(Integer.class, double.class));
|
||||||
|
assertFalse(ClassUtils.isAssignable(double.class, Integer.class));
|
||||||
|
}
|
||||||
|
|
||||||
public void testClassPackageAsResourcePath() {
|
public void testClassPackageAsResourcePath() {
|
||||||
String result = ClassUtils.classPackageAsResourcePath(Proxy.class);
|
String result = ClassUtils.classPackageAsResourcePath(Proxy.class);
|
||||||
assertTrue(result.equals("java/lang/reflect"));
|
assertTrue(result.equals("java/lang/reflect"));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue