code: public Object invokeOptional(T target, Object... args) throws InvocationTargetException {
      Method m = getMethod(target.getClass());
      if (m == null) {
        return null;
      }
      try {
        return m.invoke(target, args);
      } catch (IllegalAccessException e) {
        return null;
      }
    }
docs: Invokes the method on {@code target} with {@code args}. If the method does not exist or is not
  public then {@code null} is returned. See also
  {@link #invokeOptionalWithoutCheckedException(Object, Object...)}.
  
  @throws IllegalArgumentException if the arguments are invalid
  @throws InvocationTargetException if the invocation throws an exception