ΥπολογιστέςΠρογραμματισμός

Java Generics: περιγραφή και μέθοδοι

Ξεκινώντας με την εμφάνιση της γλώσσας Java έχει υποστεί πολλές αλλαγές, οι οποίες αναμφίβολα έφερε θετικά στιγμές στην λειτουργικότητά του. Μία από αυτές τις σημαντικές αλλαγές είναι η εισαγωγή της Java Generic ή γενικεύσεις. Αυτή η λειτουργία δεν κάνει μόνο η γλώσσα πιο ευέλικτο και ευπροσάρμοστο, αλλά και πολύ πιο ασφαλές από την άποψη της να φέρει τους τύπους δεδομένων.

Το γεγονός είναι ότι πριν από την εισαγωγή των generics στη Java γενικό κώδικα θα μπορούσε να δημιουργηθεί, όχι μόνο από την άποψη του αντικειμένου αναφοράς τύπου. Αυτές οι συνδέσεις μπορούν να εκχωρηθούν σε οποιοδήποτε αντικείμενο. Μετά από όλα, μαθήματα σε Java είναι σιωπηρή κληρονόμοι τάξη αντικειμένου. Ωστόσο, η προσέγγιση αυτή είναι μια πιθανή πηγή πολλών λαθών που σχετίζονται με τους τύπους ασφάλεια στην προφανή μετατροπή ενός αντικειμένου από το αντικείμενο με το είδος-στόχο. Όταν χρησιμοποιείτε γενικεύσεις όλα τα εκμαγεία που εκτελούνται σιωπηρά και αυτόματα, εξαλείφοντας ακόμη και την πιθανότητα λαθών.

Java Generics: περιγραφή και το παράδειγμα

Ας δούμε ένα απλό παράδειγμα της εφαρμογής της γενίκευσης σε κανονικές τάξεις στο παρακάτω σχήμα. Και στη συνέχεια να προχωρήσει σε λεπτομερή εξέταση όλων των λεπτές αποχρώσεις και τις αποχρώσεις της Java Generic.

Δώστε προσοχή στον τρόπο με τον οποίο η δήλωση της κλάσης συμβαίνει Ζεύγος. Αμέσως μετά το όνομα της κλάσης, ανοικτή παρένθεση γωνία, η οποία υποδεικνύεται το γράμμα T. Είναι ένα είδος πληρωτικού, η οποία βρίσκεται στη διαδικασία της δημιουργίας μιας παράδειγμα αυτής της κατηγορίας θα αντικατασταθεί από ένα συγκεκριμένο τύπο. Φαίνεται ως εξής: Ζεύγος obj = new Pair (). Θα πρέπει να σημειωθεί ότι, αντί του Τ να καθορίσετε οποιοδήποτε γράμμα, αλλά, κατά κανόνα, χρησιμοποιήστε T, V ή Ε

Σημείωση: ξεκινώντας με την όγδοη έκδοση του Java, διευκρινίζοντας το είδος στόχου όταν δηλώνει γωνιακές αγκύλες αναφοράς στον κατασκευαστή μπορεί να αφεθεί κενή. Έτσι, παραδείγματος χάριν μπορεί να ξαναγραφεί ως ανωτέρω: Ζεύγος obj = new Pair <> ().

Όταν μια κλάση δηλώνεται με τέτοιο τρόπο, στη συνέχεια, στο σώμα του, αντί συγκεκριμένων τύπων πεδίων, συνδέσεις, αντικείμενα που επιστρέφονται από τις μεθόδους που μπορείτε να χρησιμοποιήσετε αυτό το γράμμα. Από Τ όταν τη δημιουργία του αντικειμένου κατηγορίας αντικαθίσταται από ένα συγκεκριμένο τύπο, πρώτο και δεύτερο πεδία σε αυτή την περίπτωση θα είναι της Ακέραιος τύπου.

Σύμφωνα με τη λογική των επιχειρημάτων και firstItem secondItem, παραπέμπεται στην αρμόδια κατασκευαστής πρέπει επίσης να είναι τύπου Ακέραιος ή υποκατηγορία. Αν επιχειρήσετε να μεταδώσει έναν τύπο δεδομένων που είναι διαφορετικό από αυτό που καθορίστηκε κατά τη δημιουργία ενός αντικειμένου, ο compiler δεν θα αφήσει αυτό το λάθος. Έτσι, η κατασκευή ορισμάτων όταν ένα αντικείμενο θα είναι ως εξής: Ζεύγος obj = new Pair <> (νέο Ακέραιος (1), νέα Ακέραιος (2)). Το ίδιο ισχύει και για τα επιχειρήματα και τις μεθόδους setFirst setSecond. Και όπως ίσως έχετε μαντέψει, μεθόδους getFirst getSecond και θα επιστρέψει μια τιμή τύπου Integer.

Γενικευμένη με πολλές παραμέτρους είδη της κατηγορίας

Στην γενικευμένη τάξεις μπορεί επίσης να δηλώνει πολλαπλές παραμέτρους του τύπου που έχουν οριστεί σε αγκύλες με κόμμα. Ανασχεδιασμένο από μια υπόθεση Ζεύγος κατηγορία παρουσιάζεται παρακάτω.

Όπως μπορείτε να δείτε, όταν δημιουργείτε μια παρουσία αυτής της κατηγορίας σε αγκύλες πρέπει να αναφέρουν τον ίδιο αριθμό ειδών ως παράμετροι. Αν είστε εξοικειωμένοι με αυτό το είδος της δομής δεδομένων ως χάρτη, μπορείτε να δείτε ότι χρησιμοποιεί ακριβώς την ίδια αρχή. Εκεί, το πρώτο όρισμα καθορίζει τον τύπο του κλειδιού, και το δεύτερο - το είδος της αξίας. Θα πρέπει να σημειωθεί ότι οι τύποι μεταδίδονται όταν ένα αντικείμενο επιχειρήματα μπορεί να επικαλύπτονται. Για παράδειγμα, η παρακάτω διαφήμιση Ζεύγος τάξη παράδειγμα είναι απολύτως σωστή: Ζεύγος obj.

Ορισμένες λειτουργίες των γενικεύσεων

Πριν προχωρήσουμε περαιτέρω, θα πρέπει να σημειωθεί ότι ο compiler της Java δεν δημιουργεί διαφορετικές εκδόσεις της κατηγορίας Ζεύγος. Στην πραγματικότητα, κατά τη διαδικασία κατάρτισης ενός γενικευμένου τύπου όλες τις πληροφορίες διαγράφονται. Αντ 'αυτού, να σας φέρει τα κατάλληλα είδη, δημιουργώντας μια ειδική έκδοση της κατηγορίας Ζεύγος. Ωστόσο, το πρόγραμμα εξακολουθεί να υπάρχει μόνο μια γενική έκδοση της κατηγορίας. Αυτή η διαδικασία ονομάζεται σε Java τύπου Generic καθαρισμού.

Σημείωση ένα σημαντικό σημείο. Σύνδεση με διαφορετικές εκδοχές του ίδιου java γενική τάξη δεν μπορεί να δείξει ένα και το ίδιο αντικείμενο. Δηλαδή, ας υποθέσουμε ότι έχουμε δύο συνδέσμους: Ζεύγος obj1 και Pair obj2. Κατά συνέπεια, σύμφωνα obj1 = obj2 κάποιο σφάλμα. Παρά το γεγονός ότι και οι δύο μεταβλητές είναι τύπου Ζεύγος , τα αντικείμενα στα οποία αναφέρονται, είναι διαφορετικά. Αυτό είναι ένα χαρακτηριστικό παράδειγμα του είδους της ασφάλειας στη Java Generic.

Περιορισμοί στις γενικές τάξεις

Είναι σημαντικό να γνωρίζουμε ότι γενικεύσεις μπορεί να εφαρμοστεί μόνο σε τύπους αναφοράς, που είναι να περάσει τις παραμέτρους γενική κατηγορία επιχείρημα java πρέπει να είναι τύπου κλάσης. Αυτοί οι απλοί τύποι, όπως, π.χ., διπλά ή μεγάλης, δεν μπορούν να μεταφερθούν. Με άλλα λόγια, η ακόλουθη γραμμή Ζεύγος δήλωση τάξη δεν επιτρέπεται: Ζεύγος obj. Ωστόσο, ο περιορισμός αυτός δεν είναι ένα σοβαρό πρόβλημα, καθώς υπάρχει αντίστοιχη κλάση Java περιτύλιγμα για κάθε πρωτόγονο είδος. Για να κυριολεκτήσουμε, αν το ζευγάρι κατηγορία που θέλετε να ενσωματώσει ένας ακέραιος και Boolean τιμή avtoupakovka κάνει τα πάντα για εσάς: Ζεύγος obj = new Pair <> (25, true).

Ένας άλλος σοβαρός περιορισμός είναι η ανικανότητα να δημιουργήσουν μια παρουσία του τύπου παράμετρο. Για παράδειγμα, η ακόλουθη γραμμή θα προκαλέσει ένα σφάλμα μεταγλώττισης: T πρώτη = new T (). Αυτό είναι προφανές, γιατί δεν ξέρεις εκ των προτέρων αν ένα επιχείρημα περάσει μια πλήρη κατηγορία ή αφηρημένα, ή ακόμα και διασύνδεση. Το ίδιο ισχύει και για τη δημιουργία συστοιχιών.

περιορισμένα είδη

Αρκετά συχνά υπάρχουν περιπτώσεις όταν είναι αναγκαίο να περιοριστεί ο κατάλογος των ειδών που μπορεί να περάσει ως επιχείρημα για την JAVA γενική τάξη. Ας υποθέσουμε ότι στην τάξη Ζεύγος μας θέλουμε να ενσωματώσει μόνο τις αριθμητικές τιμές για περισσότερες μαθηματικές πράξεις τους. Για να γίνει αυτό θα πρέπει να καθορίσει το ανώτατο όριο του τύπου παράμετρο. Αυτό πραγματοποιείται με τη βοήθεια ενός υπερκλάση διαφημίσεις κληρονομήσει όλα τα επιχειρήματα που ψηφίστηκε το αγκύλες. Θα δούμε ως εξής: Κατηγορία Ζεύγος <Τ εκτείνεται Αριθμός>. Με τον τρόπο αυτό, ο μεταγλωττιστής διαπιστώνει ότι αντί της η παράμετρος Τ μπορεί να είναι υποκατεστημένες ή τάξη αριθμός ή ένα από υποκατηγορίες της.

Αυτό είναι ένα κοινό υποδοχής. οι περιορισμοί αυτοί χρησιμοποιούνται συχνά για να παρέχει τις παραμέτρους τύπου συμβατότητα σε μια και την ίδια κατηγορία. Εξετάστε το παράδειγμα στην τάξη μας Ζεύγος: κατηγορία Ζεύγος . Εδώ λέμε τη compiler που ο τύπος Τ μπορεί να είναι αυθαίρετη, και τον τύπο V πρέπει να είναι είτε T τύπου ή σε μία από τις υποκατηγορίες της.

Ο περιορισμός της «κάτω» είναι ακριβώς με τον ίδιο τρόπο, αλλά αντί για τη λέξη επεκτείνεται για να σημάνει τη λέξη σούπερ. Αυτό έχει ταξινομηθεί κατηγορία Ζεύγος λέει ότι αντί της Τ μπορεί να αντικατασταθεί ή ArrayList, ή οποιαδήποτε τάξη ή περιβάλλον που κληρονομεί.

Οι γενικές μέθοδοι Java και κατασκευαστές

Στην Java, γενικεύσεις δεν μπορεί να εφαρμοστεί μόνο στις τάξεις, αλλά και τις μεθόδους. Για παράδειγμα, μια γενική μέθοδος μπορεί να δηλωθεί σε μια κανονική τάξη.

Όπως φαίνεται στο παραπάνω σχήμα, η διαφήμιση γενικευμένη μέθοδος δεν είναι μεγάλη υπόθεση. Αρκετά πριν ο τύπος επιστροφής μιας μεθόδου για να θέσει τις γωνιακές αγκύλες και προσδιορίζει τις παραμέτρους τύπου σε αυτές.

Αν όλα γίνονται παρόμοια με τον κατασκευαστή:

αγκύλες στην περίπτωση αυτή τεθεί πριν από το όνομα του σχεδιαστή, γιατί δεν έχει τιμή επιστροφής. Το αποτέλεσμα και των δύο προγραμμάτων θα είναι:

ακέραιος αριθμός

κορδόνι

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 el.delachieve.com. Theme powered by WordPress.