Sobes.tech
Junior

Τι δυνατότητες παρέχουν τα Generics;

sobes.tech AI

Απάντηση από AI

Οι γενικές (generics) προσφέρουν τις ακόλουθες δυνατότητες:

  • Αυξημένη ασφάλεια τύπων (Type Safety): Επιτρέπουν τον εντοπισμό σφαλμάτων τύπων κατά τη φάση της μεταγλώττισης, όχι κατά την εκτέλεση.
  • Απαλλαγή από μετατροπές τύπων (Type Casting): Αποφεύγουν την ανάγκη για ρητές μετατροπές τύπων κατά την εργασία με συλλογές και άλλες δομές δεδομένων.
  • Μεγαλύτερη επαναχρησιμοποίηση κώδικα: Επιτρέπουν τη δημιουργία γενικών κλάσεων, διεπαφών και μεθόδων που λειτουργούν με διαφορετικούς τύπους δεδομένων χωρίς διπλότυπη λογική.
  • Βελτίωση της απόδοσης: Αν και στα Java τα γενικά υλοποιούνται μέσω διαγραφής τύπων (Type Erasure), που δεν πάντα προσφέρει άμεση βελτίωση της απόδοσης σε σύγκριση με τη χρήση Object και μετατροπών, σε ορισμένες γλώσσες (όπως η C#) μπορούν να παρέχουν καλύτερη απόδοση αποφεύγοντας το boxing/unboxing όταν εργάζονται με πρωταρχικούς τύπους.
  • Πιο κατανοητός και εύκολα συντηρήσιμος κώδικας: Δείχνουν σαφώς τους τύπους δεδομένων με τους οποίους εργάζεται ο κώδικας, καθιστώντας τον πιο κατανοητό.

Παράδειγμα χρήσης σε Java:

// Χωρίς γενικά
/*
List list = new ArrayList();
list.add("γραμμή");
Integer i = (Integer) list.get(0); // Σφάλμα κατά την εκτέλεση (ClassCastException)
*/

// Με γενικά
List<String> stringList = new ArrayList<>();
stringList.add("γραμμή");
// Integer i = stringList.get(0); // Σφάλμα μεταγλώττισης

Παράδειγμα σε C#:

// Χωρίς γενικά
/*
ArrayList list = new ArrayList();
list.Add("γραμμή");
int i = (int)list[0]; // Σφάλμα κατά την εκτέλεση (InvalidCastException)
*/

// Με γενικά
List<string> stringList = new List<string>();
stringList.Add("γραμμή");
// int i = stringList[0]; // Σφάλμα μεταγλώττισης