public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
        if (value != null) {
            return value;
        } else {
            throw exceptionSupplier.get();
        }
    }
Return the contained value, if present, otherwise throw an exception
to be created by the provided supplier.

@param <X>               Type of the exception to be thrown
@param exceptionSupplier The supplier which will return the exception to
                         be thrown
@return the present value
@throws X                    if there is no value present
@throws NullPointerException if no value is present and
                             {@code exceptionSupplier} is null
@apiNote A method reference to the exception constructor with an empty
argument list can be used as the supplier. For example,
{@code IllegalStateException::new}
android/android_framework/base/src/main/java/github/tornaco/android/thanos/core/util/Optional.java