code: public static <T> T best(T[] items, Class<?>[][] signatures, boolean[] varArgs, Class<?>[] argTypes) throws AmbiguousSignatureMatchException {
          int i = bestMatch(signatures, varArgs, argTypes);
          if (i < 0) return null;
          return items[i];
      }
docs: Selects the best item for the given argument types.
  @param <T>
  @param items
  @param signatures
  @param varArgs
  @param argTypes
  @return item
  @throws AmbiguousSignatureMatchException if multiple methods match equally