Βίντεο: M Logo HD powered SEVE Low 2024
Η Java είναι ένας πολύ καλός τρόπος να προγραμματίσετε, αλλά μερικές φορές θα χρειαστεί να γίνετε δημιουργικοί. Για να το κάνετε αυτό, μπορείτε να χρησιμοποιήσετε παραμέτρους τύπου μπαλαντέρ. Ας υποθέσουμε ότι έχετε μια μέθοδο που έχει δηλωθεί ως εξής:
public void addItems (λίστα ArrayList)
{ // μη εμφαινόμενη μέθοδος
}
ερώτηση σκέψης: Η ακόλουθη δήλωση καταρτίζεται;
addItems (νέο ArrayList ());
Αυτό είναι εκπληκτικό επειδή το
String
είναι υποτύπος
Object
. Επομένως, θα θελήσατε να πιστεύετε ότι μια παράμετρος που λέει ότι δέχεται ένα
ArrayList
αντικειμένων δέχεται
ArrayList
των συμβολοσειρών.
Δυστυχώς, η κληρονομιά δεν δουλεύει με αυτόν τον τρόπο όταν πρόκειται για τυπικές παραμέτρους τύπου. Αντ 'αυτού, πρέπει να χρησιμοποιήσετε ένα άλλο χαρακτηριστικό των γενικών φαρμάκων, που ονομάζονται μπαλαντέρ
. ArrayList
, πρέπει να κωδικοποιήσετε τη μέθοδο όπως αυτή:
public void addItems (λίστα ArrayList)
Στην περίπτωση αυτή, το ερωτηματικό υποδεικνύει ότι μπορείτε να κωδικοποιήσετε οποιοδήποτε είδος τύπου εδώ.
Αυτό είναι σχεδόν τόσο καλό όσο η κληρονομιά, αλλά τι γίνεται αν θέλετε να περιορίσετε την παράμετρο σε συλλογές μιας συγκεκριμένης υπερκλάσης; Για παράδειγμα, ας υποθέσουμε ότι εργάζεστε σε ένα σύστημα μισθοδοσίας που έχει υπερκλάση
Εργοδοτούμενο
με δύο υποκατηγορίες με όνομα
ΩριαίοΕνεργοποιητή
και
Απασχολημένο
και θέλετε αυτή τη μέθοδο ένα
ArrayList
αντικειμένων
Employee
αντικείμενα
HourlyEmployee
ή αντικείμενα
SalariedEmployee
;
επεκτείνει
public void addItems (Λίστα ArrayList)
Μέθοδος
addItems
με
ArrayList
πληκτρολογίου
Υπάλληλος
Ενεργός
Τώρα, πριν να το καλέσετε μια μέρα, πάρτε αυτό το παράδειγμα ένα βήμα παραπέρα: Ας υποθέσουμε ότι αυτή η μέθοδος
addItems
εμφανίζεται σε μια γενική κλάση που χρησιμοποιεί μια τυπική παράμετρο τύπου
class δέχεται και θέλετε τη μέθοδο
addItems
να δεχθεί
ArrayList
τύπου
E
ή οποιαδήποτε από τις υποκατηγορίες του. Για να το κάνετε αυτό, θα δηλώσατε τη μέθοδο
addItems
όπως αυτή:
public void addItems (Λίστα ArrayList)
μπορεί να είναι τύπου
E
σε οποιοδήποτε τύπο που εκτείνεται
E
.