in src/main/java/com/ql/util/express/ExpressUtil.java [125:193]
public static boolean isAssignablePrivate(Class<?> target, Class<?> source) {
if (target == source) {
return true;
}
if (target == null) {
return false;
}
//null转换
if (source == null) {
return !target.isPrimitive();
}
if (target.isAssignableFrom(source)) {
return true;
}
if (source.isPrimitive() && target == Object.class) {
return true;
}
if (!target.isPrimitive()) {
if (target == Byte.class) {
target = byte.class;
} else if (target == Short.class) {
target = short.class;
} else if (target == Integer.class) {
target = int.class;
} else if (target == Long.class) {
target = long.class;
} else if (target == Float.class) {
target = float.class;
} else if (target == Double.class) {
target = double.class;
}
}
if (!source.isPrimitive()) {
if (source == Byte.class) {
source = byte.class;
} else if (source == Short.class) {
source = short.class;
} else if (source == Integer.class) {
source = int.class;
} else if (source == Long.class) {
source = long.class;
} else if (source == Float.class) {
source = float.class;
} else if (source == Double.class) {
source = double.class;
}
}
// 转换后需要在判断一下
if (target == source) {
return true;
}
// QLambda 与函数式接口之间允许互转
if (source == QLambda.class && isFunctionInterface(target)) {
return true;
}
for (Class<?>[] classMatch : CLASS_MATCHES) {
if (target == classMatch[0] && source == classMatch[1]) {
return true;
}
}
return false;
}