Junior
Je možné v jave použiť reťazce v konštrukcii switch?
sobes.tech AI
Odpoveď od AI
Áno. Od Java 7 je možné v konštrukcii switch použiť objekty typu String.
// Príklad použitia reťazcov v switch
String status = "ACTIVE";
switch (status) {
case "ACTIVE":
System.out.println("Stav: Aktívny");
break;
case "PENDING":
System.out.println("Stav: Čaká sa");
break;
case "DELETED":
System.out.println("Stav: Vymazaný");
break;
default:
System.out.println("Neznámy stav");
}
Dôležité body pri používaní reťazcov v switch:
- Porovnanie reťazcov sa vykonáva pomocou metódy
equals(), čo je menej efektívne ako porovnanie primitívnych typov. - Ak je reťazec v
casealebo hodnota vswitchrovnánull, bude vyhodená výnimkaNullPointerException. Takéto prípady je potrebné spracovať buď predswitch, alebo v blokudefault. - Reťazce v
casemusia byť konštantami počas kompilácie. - Rozlišovanie veľkosti písmen má význam. "Active" sa nerovná "active".
Alternatívy použitia reťazcov v switch:
if-else if: Najzrejmejšia alternatíva.Enum: Preferovaný spôsob pre obmedzený počet možných hodnôt. Zabezpečuje typovú bezpečnosť a lepšiu správu kódu.
// Príklad použitia enum
public enum Status {
ACTIVE, PENDING, DELETED
}
// ...
Status currentStatus = Status.ACTIVE;
switch (currentStatus) {
case ACTIVE:
System.out.println("Stav: Aktívny");
break;
case PENDING:
System.out.println("Stav: Čaká sa");
break;
case DELETED:
System.out.println("Stav: Vymazaný");
break;
default:
System.out.println("Neznámy stav"); // Zvyčajne nie je potrebné s enum
}
Map: Môže byť užitočné, ak je zodpovedajúci reťazec a akcie dynamickejšie alebo objemnejšie.
// Príklad použitia Map
Map<String, Runnable> actions = new HashMap<>();
actions.put("ACTIVE", () -> System.out.println("Stav: Aktívny"));
actions.put("PENDING", () -> System.out.println("Stav: Čaká sa"));
actions.put("DELETED", () -> System.out.println("Stav: Vymazaný"));
// ...
String status = "ACTIVE";
actions.getOrDefault(status, () -> System.out.println("Neznámy stav")).run();
Voľba medzi týmito prístupmi závisí od konkrétneho úlohy, čitateľnosti kódu a potreby v typovej bezpečnosti. Pre obmedzený a pevný počet reťazcových hodnôt je enum zvyčajne najlepším riešením.