Ποια είναι η διαφορά μεταξύ των λέξεων-κλειδιών 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 όταν θέλετε να γράψετε δεδομένα.