Sobes.tech
Junior — Middle

Qual è la differenza tra i metodi orElse e orElseGet in Java, e quali sono le loro caratteristiche di utilizzo?

sobes.tech AI

Risposta dell'AI

In Java, i metodi orElse e orElseGet vengono utilizzati con la classe Optional per assegnare un valore predefinito se l'oggetto è assente.

  • orElse(T other) — accetta un valore predefinito che viene calcolato immediatamente al momento della chiamata del metodo, indipendentemente dal fatto che ci sia un valore in Optional.
  • orElseGet(Supplier<? extends T> other) — accetta un fornitore (funzione) che viene chiamato solo se il valore manca, cioè il calcolo del valore viene posticipato fino a quando non è necessario.

Caratteristiche d'uso:

  • Se il calcolo del valore predefinito è costoso o ha effetti collaterali, è meglio usare orElseGet per evitare costi inutili.
  • Se il valore è semplice e veloce, si può usare orElse.

Esempio:

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

// orElse calcola sempre "default"
String result1 = opt.orElse(getDefault());

// orElseGet chiama getDefault() solo se opt è vuoto
String result2 = opt.orElseGet(() -> getDefault());

public String getDefault() {
    System.out.println("Calcolo del valore predefinito");
    return "default";
}