code: public static <T> T check(T reference, Predicate<T> predicate) {
          check(reference, predicate, "Expected to fulfill the predicate, got %s", reference);
          return reference;
      }
docs: Performs check with the predicate.
  
  @param reference the reference to check
  @param predicate the predicate to use
  @param <T>       the reference type
  @return the original reference
  @throws IllegalArgumentException if the {@code reference} is empty
  @throws NullPointerException     if the {@code reference} is null
  @see #checkNotEmpty(Object, String, Object...)