jetbrick-commons/src/main/java/jetbrick/reflect/ExecutableUtils.java
public static boolean isParameterTypesCompatible(Class<?>[] lhs, Class<?>[] rhs, boolean lhsVarArgs, boolean rhsVarArgs) {
        if (lhs == null) {
            return rhs == null || rhs.length == 0;
        }
        if (rhs == null) {
            return lhs.length == 0;
        }

        if (lhsVarArgs && rhsVarArgs) {
            if (lhs.length != rhs.length) {
                return false;
            }
            //校验前面的固定参数
            for (int i = 0; i < lhs.length - 1; i++) {
                if (!ClassUtils.isAssignable(lhs[i], rhs[i])) {
                    return false;
                }
            }
            // 校验最后一个可变参数
            Class<?> c1 = lhs[lhs.length - 1].getComponentType();
            Class<?> c2 = rhs[rhs.length - 1].getComponentType();
            if (!ClassUtils.isAssignable(c1, c2)) {
                return false;
            }
        } else if (lhsVarArgs) {
            if (lhs.length - 1 > rhs.length) {
                return false;
            }
            //校验前面的固定参数
            for (int i = 0; i < lhs.length - 1; i++) {
                if (!ClassUtils.isAssignable(lhs[i], rhs[i])) {
                    return false;
                }
            }
            // 校验最后一个可变参数
            Class<?> varType = lhs[lhs.length - 1].getComponentType();
            for (int i = lhs.length - 1; i < rhs.length; i++) {
                if (!ClassUtils.isAssignable(varType, rhs[i])) {
                    return false;
                }
            }
        } else {
            if (lhs.length != rhs.length) {
                return false;
            }
            for (int i = 0; i < lhs.length; i++) {
                if (!ClassUtils.isAssignable(lhs[i], rhs[i])) {
                    return false;
                }
            }
        }
        return true;
    }
public static boolean isParameterTypesCompatible(Class<?>[] lhs, Class<?>[] rhs, boolean lhsVarArgs, boolean rhsVarArgs) {
        if (lhs == null) {
            return rhs == null || rhs.length == 0;
        }
        if (rhs == null) {
            return lhs.length == 0;
        }

        if (lhsVarArgs && rhsVarArgs) {
            if (lhs.length != rhs.length) {
                return false;
            }
            //校验前面的固定参数
            for (int i = 0; i < lhs.length - 1; i++) {
                if (!ClassUtils.isAssignable(lhs[i], rhs[i])) {
                    return false;
                }
            }
            // 校验最后一个可变参数
            Class<?> c1 = lhs[lhs.length - 1].getComponentType();
            Class<?> c2 = rhs[rhs.length - 1].getComponentType();
            if (!ClassUtils.isAssignable(c1, c2)) {
                return false;
            }
        } else if (lhsVarArgs) {
            if (lhs.length - 1 > rhs.length) {
                return false;
            }
            //校验前面的固定参数
            for (int i = 0; i < lhs.length - 1; i++) {
                if (!ClassUtils.isAssignable(lhs[i], rhs[i])) {
                    return false;
                }
            }
            // 校验最后一个可变参数
            Class<?> varType = lhs[lhs.length - 1].getComponentType();
            for (int i = lhs.length - 1; i < rhs.length; i++) {
                if (!ClassUtils.isAssignable(varType, rhs[i])) {
                    return false;
                }
            }
        } else {
            if (lhs.length != rhs.length) {
                return false;
            }
            for (int i = 0; i < lhs.length; i++) {
                if (!ClassUtils.isAssignable(lhs[i], rhs[i])) {
                    return false;
                }
            }
        }
        return true;
    }
public static boolean isParameterTypesCompatible ( Class < ? > [ ] lhs , Class < ? > [ ] rhs , boolean lhsVarArgs , boolean rhsVarArgs ) { if ( lhs == null ) { return rhs == null || rhs . length == 0 ; } if ( rhs == null ) { return lhs . length == 0 ; } if ( lhsVarArgs && rhsVarArgs ) { if ( lhs . length != rhs . length ) { return false ; } //校验前面的固定参数 for ( int i = 0 ; i < lhs . length - 1 ; i ++ ) { if ( ! ClassUtils . isAssignable ( lhs [ i ] , rhs [ i ] ) ) { return false ; } } // 校验最后一个可变参数 Class < ? > c1 = lhs [ lhs . length - 1 ] . getComponentType ( ) ; Class < ? > c2 = rhs [ rhs . length - 1 ] . getComponentType ( ) ; if ( ! ClassUtils . isAssignable ( c1 , c2 ) ) { return false ; } } else if ( lhsVarArgs ) { if ( lhs . length - 1 > rhs . length ) { return false ; } //校验前面的固定参数 for ( int i = 0 ; i < lhs . length - 1 ; i ++ ) { if ( ! ClassUtils . isAssignable ( lhs [ i ] , rhs [ i ] ) ) { return false ; } } // 校验最后一个可变参数 Class < ? > varType = lhs [ lhs . length - 1 ] . getComponentType ( ) ; for ( int i = lhs . length - 1 ; i < rhs . length ; i ++ ) { if ( ! ClassUtils . isAssignable ( varType , rhs [ i ] ) ) { return false ; } } } else { if ( lhs . length != rhs . length ) { return false ; } for ( int i = 0 ; i < lhs . length ; i ++ ) { if ( ! ClassUtils . isAssignable ( lhs [ i ] , rhs [ i ] ) ) { return false ; } } } return true ; }
判断参数列表是否兼容, 支持可变参数.

@param lhs - left operand
@param rhs - right operand
@param lhsVarArgs － lhs 是否是可变参数
@param rhsVarArgs － rhs 是否是可变参数
@return 是否兼容
判断参数列表是否兼容 支持可变参数 .