Sobes.tech
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 case nebo hodnota v switch null, dojde k vyhození výjimky NullPointerException. Tyto případy je třeba řešit před switch nebo v bloku default.
  • Řetězce v case musí 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.