Członek zespołu Guava tutaj.
Prawdopodobnie największą wadą programu nulljest to, że nie jest oczywiste, co to powinno oznaczać w danym kontekście: nie ma ilustracyjnej nazwy. Nie zawsze jest oczywiste, że nulloznacza to „brak wartości dla tego parametru” - do cholery, jako wartość zwracana, czasami oznacza to „błąd”, a nawet „sukces” (!!), lub po prostu „prawidłowa odpowiedź to nic”. Optionaljest często pojęciem, które faktycznie masz na myśli, ustawiając zmienną dopuszczającą wartość null, ale nie zawsze. Jeśli tak nie jest, zalecamy napisanie własnej klasy, podobnej do Optionalinnego schematu nazewnictwa, ale z innym schematem, aby wyjaśnić, co tak naprawdę masz na myśli.
Ale powiedziałbym, że największą zaletą Optionalnie jest czytelność: zaletą jest to, że jest odporny na idiotę. Zmusza cię do aktywnego myślenia o nieobecnym przypadku, jeśli chcesz, aby program w ogóle się kompilował, ponieważ musisz aktywnie rozpakować Optionali zająć się tym przypadkiem. Null sprawia, że po prostu zapomnienie o rzeczach jest niepokojąco łatwe i chociaż FindBugs pomaga, nie sądzę, że rozwiązuje ten problem równie dobrze. Jest to szczególnie istotne, gdy zwracasz wartości, które mogą, ale nie muszą być „obecne”. Ty (i inni) jesteście znacznie bardziej skłonni zapomnieć, że other.method(a, b)może zwrócić nullwartość, niż prawdopodobnie zapomnieć, że amoże to mieć miejsce nullpodczas implementacji other.method. PowracającyOptional sprawia, że wywołujący nie mogą zapomnieć o tym przypadku, ponieważ sami muszą rozpakować obiekt.
Z tych powodów zalecamy używanie Optionaljako zwracanego typu dla metod, ale niekoniecznie w argumentach metody.
(Nawiasem mówiąc, jest to całkowicie zaczerpnięte z dyskusji tutaj ).