Sobes.tech
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";
}