private static boolean isAssignable(Class<?>[] formal, Class<?>[] actual) {
        if (formal.length != actual.length) {
            return false;
        }

        for (int i = 0; i < formal.length; i++) {
            if (actual[i] == null) {
                if ((formal[i].equals(int.class))
                    || (formal[i].equals(double.class))
                    || (formal[i].equals(boolean.class))) {
                    return false;
                }
                
                continue;
            }

            if (!formal[i].isAssignableFrom(actual[i])) {
                return false;
            }
        }

        return true;
    }