Middle+
Τι είναι η διαγραφή τύπων στη Java;
sobes.tech AI
Απάντηση από AI
Η διαγραφή τύπων (type erasure) είναι μια διαδικασία στη Java κατά την οποία οι πληροφορίες σχετικά με τους τύπους διαγράφονται κατά τη φάση της μεταγλώττισης, και ο μεταγλωττισμένος κώδικας bytecode δεν περιέχει πληροφορίες σχετικά με τις παραμέτρους γενικών τύπων.
Βασικά σημεία:
- Συμβατότητα: Επιτρέπει στους γενικούς τύπους να λειτουργούν με παλαιότερο κώδικα που δεν χρησιμοποιεί γενικούς.
- Εφαρμογή: Ο μεταγλωττιστής αντικαθιστά τους παραμετροποιημένους τύπους με το ανώτατο όριό τους (συνήθως
Object) και εισάγει τις απαραίτητες μετατροπές τύπων. - Περιορισμοί:
- Δεν μπορούν να χρησιμοποιηθούν πρωταρχικοί τύποι ως παράμετροι γενικών τύπων (π.χ.,
List<int>). - Δεν μπορεί να δημιουργηθεί πίνακας παραμετροποιημένου τύπου (π.χ.,
new List<String>[10]). - Δεν μπορεί να χρησιμοποιηθεί ο τελεστής
instanceofγια τον έλεγχο παραμετροποιημένου τύπου (π.χ.,if (list instanceof List<String>)). - Δεν μπορούν να υπερφορτωθούν μέθοδοι με παραμετροποιημένους τύπους αν οι υπογραφές τους μετά τη διαγραφή ταιριάζουν.
- Δεν μπορούν να χρησιμοποιηθούν πρωταρχικοί τύποι ως παράμετροι γενικών τύπων (π.χ.,
Παράδειγμα:
// Πηγαίος κώδικας με γενικούς τύπους
List<String> stringList = new ArrayList<>();
stringList.add("hello");
String s = stringList.get(0); // Δεν απαιτεί ρητό μετασχηματισμό
// Μετά τη διαγραφή τύπων
List list = new ArrayList(); // Ο τύπος List<String> αντικαταστάθηκε από List
list.add("hello");
String s = (String)list.get(0); // Εισάγεται αυθαίρετος μετασχηματισμός
Παρά τις περιορισμούς, η διαγραφή τύπων αποτελεί βασικό στοιχείο στην υλοποίηση γενικών τύπων στη Java, διασφαλίζοντας την backward compatibility.