🔍 Ответ на задачу про Optional: Почему orElse может тормозить ваш код? 🐢
Использование Optional — это стандарт де-факто в современном Java-коде. Но знаете ли вы разницу между
Задача: Что произойдет, если вызвать
Объяснение:
Вывод: В примере выше на консоль выведется "Вызов тяжелого метода!", хотя значение "Hello" уже есть. Если бы мы использовали
⚡️ Не перепутайте:
Используйте
Используйте
Понравился разбор? Ставь ❤️, подписывайся и пиши в комментариях, какие ещё методы Optional тебя путают!
#java #optional #performance #clean_code #backend #интервью #java_interview_tasks
Использование Optional — это стандарт де-факто в современном Java-коде. Но знаете ли вы разницу между
orElse() и orElseGet()? Ошибка здесь может привести к лишним вызовам методов и даже к падению производительности.Задача: Что произойдет, если вызвать
orElse() для метода, который делает тяжелую операцию (например, запрос в БД), даже если значение в Optional уже есть?Объяснение:
orElse(T other) принимает готовый объект. Это значит, что аргумент вычисляется до вызова метода orElse. Даже если Optional не пустой, getDefaultValue() будет выполнен! orElseGet(Supplier<? extends T> other) принимает лямбду (Supplier). Она выполняется только тогда, когда Optional действительно пуст (ленивые вычисления).Вывод: В примере выше на консоль выведется "Вызов тяжелого метода!", хотя значение "Hello" уже есть. Если бы мы использовали
optional.orElseGet(() -> getDefaultValue()), лишнего вызова бы не было.⚡️ Не перепутайте:
Используйте
orElse(), если у вас уже есть готовая константа или примитив.Используйте
orElseGet(), если получение дефолтного значения требует вычислений или создания нового объекта.Понравился разбор? Ставь ❤️, подписывайся и пиши в комментариях, какие ещё методы Optional тебя путают!
#java #optional #performance #clean_code #backend #интервью #java_interview_tasks
❤11👍6🔥5👏1