Sobes.tech
Junior — Middle

Каква е разликата между методите orElse и orElseGet в Java и какви са техните характеристики на използване?

sobes.tech AI

Отговор от 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";
}