Sobes.tech
Junior

Se pot folosi șiruri în construcția switch în Java?

sobes.tech AI

Răspuns de la AI

Da. Începând cu Java 7, se pot folosi obiecte de tip String în construcțiile switch.

// Exemplu de utilizare a stringurilor în switch
String status = "ACTIVE";
switch (status) {
    case "ACTIVE":
        System.out.println("Stare: Activ");
        break;
    case "PENDING":
        System.out.println("Stare: În așteptare");
        break;
    case "DELETED":
        System.out.println("Stare: Șters");
        break;
    default:
        System.out.println("Stare necunoscută");
}

Puncte importante la utilizarea stringurilor în switch:

  • Compararea stringurilor se face cu metoda equals(), ceea ce este mai puțin eficient decât compararea tipurilor primitive.
  • Dacă stringul din case sau valoarea din switch este null, se va arunca o excepție NullPointerException. Este necesar să tratați aceste cazuri înainte de switch sau în blocul default.
  • Stringurile din case trebuie să fie constante în timpul compilării.
  • Sensibilitatea la majuscule/minuscule contează. "Active" nu este egal cu "active".

Alternative la utilizarea stringurilor în switch:

  • if-else if: Cea mai evidentă alternativă.
  • Enum: Metoda preferată pentru un set limitat de valori posibile. Asigură siguranța tipurilor și o gestionare mai bună a codului.
// Exemplu de utilizare a enum
public enum Status {
    ACTIVE, PENDING, DELETED
}

// ...

Status currentStatus = Status.ACTIVE;
switch (currentStatus) {
    case ACTIVE:
        System.out.println("Stare: Activ");
        break;
    case PENDING:
        System.out.println("Stare: În așteptare");
        break;
    case DELETED:
        System.out.println("Stare: Șters");
        break;
    default:
        System.out.println("Stare necunoscută"); // De obicei nu este necesar cu enum
}
  • Map: Poate fi util dacă asocierea stringurilor și acțiunilor este mai dinamică sau extinsă.
// Exemplu de utilizare Map
Map<String, Runnable> actions = new HashMap<>();
actions.put("ACTIVE", () -> System.out.println("Stare: Activ"));
actions.put("PENDING", () -> System.out.println("Stare: În așteptare"));
actions.put("DELETED", () -> System.out.println("Stare: Șters"));

// ...

String status = "ACTIVE";
actions.getOrDefault(status, () -> System.out.println("Stare necunoscută")).run();

Alegerea între aceste abordări depinde de sarcina specifică, de lizibilitatea codului și de necesitatea siguranței tipurilor. Pentru un set limitat și fix de valori string, în mod obișnuit, Enum este cea mai bună soluție.