Back to questions
Junior — Middle
82
Какое различие между методами orElse и orElseGet в Java, и в чем их особенности использования?
Answer from AI
sobes.tech AI
В Java методы orElse и orElseGet используются с классом Optional для задания значения по умолчанию, если объект отсутствует.
orElse(T other)— принимает значение по умолчанию, которое вычисляется сразу при вызове метода, независимо от того, есть ли значение в Optional.orElseGet(Supplier<? extends T> other)— принимает поставщика (функцию), который вызывается только если значение отсутствует, то есть вычисление значения откладывается до необходимости.
Особенности использования:
- Если вычисление значения по умолчанию дорогое или имеет побочные эффекты, лучше использовать
orElseGet, чтобы избежать ненужных затрат. - Если значение простое и быстрое, можно использовать
orElse.
Пример:
Optional<String> opt = Optional.empty();
// orElse всегда вычисляет "default"
String result1 = opt.orElse(getDefault());
// orElseGet вызывает getDefault() только если opt пуст
String result2 = opt.orElseGet(() -> getDefault());
public String getDefault() {
System.out.println("Вычисляем значение по умолчанию");
return "default";
}