code: @Beta
      public static <T, E extends Throwable> T check(T reference, Predicate<T> predicate,
                                                     Class<E> throwableType) throws E {
          check(reference, predicate, throwableType, "Expected to fulfill the predicate, got %s", reference);
          return reference;
      }
docs: Performs check with the predicate.
  
  @param reference     reference to check
  @param predicate     the predicate to use
  @param throwableType the throwable type to throw
  @param <T>           the reference type
  @param <E>           the exception type
  @return the original reference
  @throws IllegalArgumentException if the {@code reference}, {@code predicate} or {@code throwableType} is null
  @throws IllegalArgumentException if the {@code throwableType} cannot be instantiated
  @throws E                        if the {@code reference} doesn't match provided predicate