Junior
Μπορούν να χρησιμοποιηθούν συμβολοσειρές στη δομή switch στην Java;
sobes.tech AI
Απάντηση από AI
Ναι. Από το Java 7 και μετά, μπορείτε να χρησιμοποιείτε αντικείμενα τύπου String στις δομές switch.
// Παράδειγμα χρήσης των strings στο switch
String status = "ACTIVE";
switch (status) {
case "ACTIVE":
System.out.println("Κατάσταση: Ενεργή");
break;
case "PENDING":
System.out.println("Κατάσταση: Σε αναμονή");
break;
case "DELETED":
System.out.println("Κατάσταση: Διαγραμμένη");
break;
default:
System.out.println("Άγνωστη κατάσταση");
}
Σημεία που πρέπει να προσέξετε κατά τη χρήση των strings στο switch:
- Η σύγκριση των strings γίνεται με τη μέθοδο
equals(), η οποία είναι λιγότερο αποδοτική από τη σύγκριση primitive τύπων. - Αν το string στο
caseή η τιμή στοswitchείναιnull, θα προκληθεί εξαίρεσηNullPointerException. Πρέπει να χειριστείτε αυτές τις περιπτώσεις πριν από τοswitchή στο μπλοκdefault. - Τα strings στο
caseπρέπει να είναι σταθερές κατά τη μεταγλώττιση. - Η ευαισθησία σε πεζά/κεφαλαία έχει σημασία. "Active" δεν ισούται με "active".
Εναλλακτικές λύσεις στη χρήση strings στο switch:
if-else if: Η πιο προφανής εναλλακτική.Enum: Προτιμότερος τρόπος για περιορισμένο σύνολο πιθανών τιμών. Παρέχει ασφάλεια τύπων και καλύτερη διαχείριση κώδικα.
// Παράδειγμα χρήσης enum
public enum Status {
ACTIVE, PENDING, DELETED
}
// ...
Status currentStatus = Status.ACTIVE;
switch (currentStatus) {
case ACTIVE:
System.out.println("Κατάσταση: Ενεργή");
break;
case PENDING:
System.out.println("Κατάσταση: Σε αναμονή");
break;
case DELETED:
System.out.println("Κατάσταση: Διαγραμμένη");
break;
default:
System.out.println("Άγνωστη κατάσταση"); // Συνήθως δεν απαιτείται με enum
}
Map: Μπορεί να είναι χρήσιμο αν η αντιστοιχία strings και ενεργειών είναι πιο δυναμική ή εκτεταμένη.
// Παράδειγμα χρήσης Map
Map<String, Runnable> actions = new HashMap<>();
actions.put("ACTIVE", () -> System.out.println("Κατάσταση: Ενεργή"));
actions.put("PENDING", () -> System.out.println("Κατάσταση: Σε αναμονή"));
actions.put("DELETED", () -> System.out.println("Κατάσταση: Διαγραμμένη"));
// ...
String status = "ACTIVE";
actions.getOrDefault(status, () -> System.out.println("Άγνωστη κατάσταση")).run();
Η επιλογή μεταξύ αυτών των προσεγγίσεων εξαρτάται από την συγκεκριμένη εργασία, την αναγνωσιμότητα του κώδικα και την ανάγκη για ασφάλεια τύπων. Για περιορισμένο και σταθερό σύνολο string τιμών, το Enum είναι συνήθως η καλύτερη λύση.