Sobes.tech
Junior — Middle

Jaka jest różnica między metodami orElse i orElseGet w Java, i jakie są ich cechy użytkowania?

sobes.tech AI

Odpowiedź od AI

W Javie metody orElse i orElseGet są używane z klasą Optional do ustawiania wartości domyślnej, jeśli obiekt jest nieobecny.

  • orElse(T other) — przyjmuje wartość domyślną, która jest obliczana od razu podczas wywołania metody, niezależnie od tego, czy w Optional jest wartość.
  • orElseGet(Supplier<? extends T> other) — przyjmuje dostawcę (funkcję), który jest wywoływany tylko jeśli wartość jest nieobecna, czyli obliczenie wartości jest odłożone do momentu, gdy będzie to konieczne.

Cechy użytkowania:

  • Jeśli obliczenie wartości domyślnej jest kosztowne lub ma efekty uboczne, lepiej używać orElseGet, aby uniknąć niepotrzebnych kosztów.
  • Jeśli wartość jest prosta i szybka, można użyć orElse.

Przykład:

Optional<String> opt = Optional.empty();

// orElse zawsze oblicza "default"
String result1 = opt.orElse(getDefault());

// orElseGet wywołuje getDefault() tylko jeśli opt jest pusty
String result2 = opt.orElseGet(() -> getDefault());

public String getDefault() {
    System.out.println("Obliczanie wartości domyślnej");
    return "default";
}