Value obejct, walidacja i tworzenie, zapis funkcyjny

0

Czy można to zapisać lepiej?

public static Description create(String text, Predicate<Integer> lengthValidator) {

        var result = Optional
                .ofNullable(text)
                .flatMap(textArg -> Optional.of(lengthValidator.test(textArg.length())))
                .orElseThrow();

        if (result) {

            return new Description(text);
        }
        else {

            throw new IllegalArgumentException("Wrong text length");
        }
    }
2

Jedna z możliwości.

public static Optional<Description> create(String text, Predicate<Integer> lengthValidator) {
    return lengthValidator.test(text.length()) ? Optional.of(new Description(text)) : Optional.empty();
}

Nie zezwalamy tutaj, aby text był nullem i tak ma być.
W praktyce zamiast Optional użyłbym Either albo Validation z vavr.io

0

@jarekr000000: A co z lengthValidatorem? Nie trzeba go opakowywać w Optionala? Przecież ktoś może zrobić coś takiego : Description.create("pierogi",null).

1

A moja babcia może kupić od ruskich kałacha i urządzić rozróbę w jakimś centrum handlowym - generalnie trzeba przyjąć jakieś sensowne założenia, chociażby że obiekty które tworzysz ty nie będą nullami. Input usera albo z innych systemów to inna rzecz.

5

A co z lengthValidatorem? Nie trzeba go opakowywać w Optionala? Przecież ktoś może zrobić coś takiego : Description.create("pierogi",null).

Wtedy leci NullPointerException i tak ma być. Nie chciałbyś, żeby ktoś kto wywołuje metodę z nullem się zawiódł przecież. Serio.

Generalnie - jeśli nie robisz bardzo specyficznego kodu (low level (w javie :-) ) to zapominasz o czymś takim jak null - nie ma takiego czegoś.
Ani Ty nie używasz, ani się nie zabezpieczasz przed nullami (*).

* - Zabezpieczenia przed null robisz tylko na "granicach" systemu - tam gdzie współpracujesz z jakimiś bibliotekami (IO, Rest api, Hibernate itp.) jeśli wiesz, że te biblioteki nie są "null safe" i czasem Ci podkładają nulla.

1 użytkowników online, w tym zalogowanych: 0, gości: 1