Sobes.tech
Junior

Kas Java switch-struktuuris saab kasutada stringe?

sobes.tech AI

Vastus AI-lt

Jah. Alates Java 7-st saab switch-lause kasutusele võtta String tüüpi objekte.

// Näide stringide kasutamisest switch-is
String status = "ACTIVE";
switch (status) {
    case "ACTIVE":
        System.out.println("Staatus: Aktiivne");
        break;
    case "PENDING":
        System.out.println("Staatus: Ootab");
        break;
    case "DELETED":
        System.out.println("Staatus: Kustutatud");
        break;
    default:
        System.out.println("Tundmatu staatus");
}

Olulised punktid stringide kasutamisel switch-is:

  • Võrdlus stringide vahel toimub equals() meetodi abil, mis on vähem tõhus kui primitiivsete tüüpide võrdlus.
  • Kui case-s või switch-i väärtus on null, visatakse NullPointerException. Selliseid juhtumeid tuleb käsitleda enne switch-i või default-blokis.
  • case-ide stringid peavad olema konstandid, mis on teada compile ajal.
  • Suur- ja väiketähed on olulised. "Active" ei ole võrdne "active".

Alternatiivid stringide kasutamisel switch-is:

  • if-else if: kõige ilmsem alternatiiv.
  • Enum: soovitatav viis piiratud väärtuste kogumi jaoks. Tagab tüübiturvalisuse ja parema koodi haldamise.
// Enum näide
public enum Status {
    ACTIVE, PENDING, DELETED
}

// ...

Status currentStatus = Status.ACTIVE;
switch (currentStatus) {
    case ACTIVE:
        System.out.println("Staatus: Aktiivne");
        break;
    case PENDING:
        System.out.println("Staatus: Ootab");
        break;
    case DELETED:
        System.out.println("Staatus: Kustutatud");
        break;
    default:
        System.out.println("Tundmatu staatus"); // Tavaliselt ei ole enum-iga vaja
}
  • Map: Kasulik, kui stringide ja tegevuste vastavus on dünaamilisem või suurem.
// Map näide
Map<String, Runnable> actions = new HashMap<>();
actions.put("ACTIVE", () -> System.out.println("Staatus: Aktiivne"));
actions.put("PENDING", () -> System.out.println("Staatus: Ootab"));
actions.put("DELETED", () -> System.out.println("Staatus: Kustutatud"));

// ...

String status = "ACTIVE";
actions.getOrDefault(status, () -> System.out.println("Tundmatu staatus")).run();

Valik nende lähenemisviiside vahel sõltub konkreetse ülesande, koodi loetavuse ja tüübiturvalisuse vajadusest. Piiratud ja fikseeritud string väärtuste kogumi puhul on enum tavaliselt parim lahendus.