Sobes.tech
Junior — Middle

Ποια είναι η διαφορά μεταξύ των λέξεων-κλειδιών extends και super κατά τη χρήση γενικών στη Java;

sobes.tech AI

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

Στην Java, κατά την εργασία με γενικούς τύπους, οι λέξεις-κλειδιά extends και super χρησιμοποιούνται για τον περιορισμό των τύπων και επηρεάζουν την καλυπτικότητα και την αντικαλυπτικότητα.

  • ? extends T — ανώτατος περιορισμός (καλυπτικότητα). Επιτρέπει τη χρήση του τύπου T ή οποιασδήποτε υποκλάσης του. Αυτό σημαίνει ότι μπορείτε να διαβάσετε αντικείμενα τύπου T από τη συλλογή, αλλά δεν μπορείτε να προσθέσετε με ασφάλεια αντικείμενα σε τέτοια συλλογή (εκτός από το null).

  • ? super T — κατώτατος περιορισμός (αντικαλυπτικότητα). Επιτρέπει τη χρήση του τύπου T ή οποιασδήποτε υπερκλάσης του. Αυτό σημαίνει ότι μπορείτε να προσθέσετε αντικείμενα τύπου T στη συλλογή, αλλά κατά την ανάγνωση μπορείτε να λάβετε μόνο αντικείμενα τύπου Object ή πιο γενικού τύπου.

Παράδειγμα:

List<? extends Number> listExtends = new ArrayList<Integer>();
Number num = listExtends.get(0); // Μπορεί να διαβαστεί ως Number
// listExtends.add(10); // Σφάλμα μεταγλώττισης

List<? super Integer> listSuper = new ArrayList<Number>();
listSuper.add(10); // Μπορεί να προστεθεί Integer
Object obj = listSuper.get(0); // Κατά την ανάγνωση, ο τύπος είναι Object

Έτσι, το extends χρησιμοποιείται όταν θέλετε να διαβάσετε δεδομένα από τη δομή, και το super όταν θέλετε να γράψετε δεδομένα.