code: @NotNull
      public <X extends Throwable> T orElseThrow(@NotNull Supplier<? extends X> exc) throws X {
          if (value != null) return value;
          else throw exc.get();
      }
docs: Returns inner value if present, otherwise throws the exception provided by supplier function.
  
  @param <X> the type of exception to be thrown
  @param exc  supplier function that produces an exception to be thrown
  @return inner value if present
  @throws X if inner value is not present