Sobes.tech
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 είναι συνήθως η καλύτερη λύση.