Junior
Lze v konstrukci switch v Java používat řetězce?
sobes.tech AI
Odpověď od AI
Ano. Od Java 7 dále lze v konstrukci switch používat objekty typu String.
// Příklad použití řetězců ve switch
String status = "ACTIVE";
switch (status) {
case "ACTIVE":
System.out.println("Stav: Aktivní");
break;
case "PENDING":
System.out.println("Stav: Čekající");
break;
case "DELETED":
System.out.println("Stav: Smazáno");
break;
default:
System.out.println("Neznámý stav");
}
Důležité body při použití řetězců ve switch:
- Porovnání řetězců se provádí pomocí metody
equals(), což je méně efektivní než porovnání primitivních typů. - Pokud je řetězec v
casenebo hodnota vswitchnull, dojde k vyhození výjimkyNullPointerException. Tyto případy je třeba řešit předswitchnebo v blokudefault. - Řetězce v
casemusí být konstanty při kompilaci. - Rozlišování velikosti písmen je důležité. "Active" není stejné jako "active".
Alternativy použití řetězců ve switch:
if-else if: Nejzřetelnější alternativa.Enum: Preferovaný způsob pro omezený počet možných hodnot. Zajišťuje typovou bezpečnost a lepší správu kódu.
// Příklad použití enum
public enum Status {
ACTIVE, PENDING, DELETED
}
// ...
Status currentStatus = Status.ACTIVE;
switch (currentStatus) {
case ACTIVE:
System.out.println("Stav: Aktivní");
break;
case PENDING:
System.out.println("Stav: Čekající");
break;
case DELETED:
System.out.println("Stav: Smazáno");
break;
default:
System.out.println("Neznámý stav"); // Obvykle není potřeba s enum
}
Map: Může být užitečné, pokud je přiřazení řetězců a akcí dynamické nebo rozsáhlé.
// Příklad použití Map
Map<String, Runnable> actions = new HashMap<>();
actions.put("ACTIVE", () -> System.out.println("Stav: Aktivní"));
actions.put("PENDING", () -> System.out.println("Stav: Čekající"));
actions.put("DELETED", () -> System.out.println("Stav: Smazáno"));
// ...
String status = "ACTIVE";
actions.getOrDefault(status, () -> System.out.println("Neznámý stav")).run();
Volba mezi těmito přístupy závisí na konkrétním úkolu, čitelnosti kódu a potřebě typové bezpečnosti. Pro omezenou a pevnou sadu řetězcových hodnot je obvykle nejlepší použít Enum.