public static boolean isAssignablePrivate()

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;
    }