static boolean isCongruent(Class<?>[] params, Object[] args){
    boolean ret = false;
    if(args == null)
      return params.length == 0;
    if(params.length == args.length){
      ret = true;
      for(int i = 0; ret && i < params.length; i++){
        Object arg = args[i];
        Class<?> argType = (arg == null) ? null : arg.getClass();
        Class<?> paramType = params[i];
        ret = paramArgTypeMatch(paramType, argType);
        }
      }
    return ret;
  }