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
casesau valoarea dinswitchestenull, se va arunca o excepțieNullPointerException. Este necesar să tratați aceste cazuri înainte deswitchsau în bloculdefault. - Stringurile din
casetrebuie 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.