Sobes.tech
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 case alebo hodnota v switch rovná null, bude vyhodená výnimka NullPointerException. Takéto prípady je potrebné spracovať buď pred switch, alebo v bloku default.
  • Reťazce v case musia 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.