public T orElseGet(Supplier<T> defaultSupplier) {
        return valid ? value : defaultSupplier.get();
    }
@Test
    public void orElseGet() {
        assertThat(ValueWrapper.of(1).orElseGet(() -> 3)).isEqualTo((Integer) 1);
        assertThat(ValueWrapper.errorWithValidValue(null, null).orElseGet(() -> 3)).isEqualTo(3);
        assertThat(ValueWrapper.of(null).orElseGet(() -> 3)).isNull();
    }