ClassUtils.isAssignable(Class<?> lhsType, Class<?> rhsType)
用于判断rhsType类是否能转换为lhsType类
ClassUtils.isAssignable(List.class, ArrayList.class)
//结果为true
/**
* Check if the right-hand side type may be assigned to the left-hand side
* type, assuming setting by reflection. Considers primitive wrapper
* classes as assignable to the corresponding primitive types.
* @param lhsType the target type
* @param rhsType the value type that should be assigned to the target type
* @return if the target type is assignable from the value type
* @see TypeUtils#isAssignable
*/
public static boolean isAssignable(Class<?> lhsType, Class<?> rhsType) {
Assert.notNull(lhsType, "Left-hand side type must not be null");
Assert.notNull(rhsType, "Right-hand side type must not be null");
// 若左边类型 是右边类型的父类、父接口,或者左边类型等于右边类型
if (lhsType.isAssignableFrom(rhsType)) {
return true;
}
// 左边入参是否是基本类型
if (lhsType.isPrimitive()) {
//primitiveWrapperTypeMap是从包装类型到基本类型的map,将右边入参转化为基本类型
Class<?> resolvedPrimitive = primitiveWrapperTypeMap.get(rhsType);
if (lhsType == resolvedPrimitive) {
return true;
}
}
else {
// 将右边入参转化为包装类型
Class<?> resolvedWrapper = primitiveTypeToWrapperMap.get(rhsType);
if (resolvedWrapper != null && lhsType.isAssignableFrom(resolvedWrapper))
{
return true;
}
}
return false;
}
本文详细介绍了Java中ClassUtils.isAssignable()方法的使用,该方法用于判断一个类是否可以赋值给另一个类。通过示例展示了如何判断List.class能否赋值给ArrayList.class,并解释了其内部实现逻辑,包括处理原始类型和包装类型的情况。
285

被折叠的 条评论
为什么被折叠?



