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õiswitch-i väärtus onnull, visatakseNullPointerException. 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.