Βίντεο: Java Tutorial Στα Ελληνικά - Μάθημα #13 : Abstract & Interfaces 2024
Ένας από τους πρωτότυπους στόχους σχεδιασμού για την Java ήταν να κρατήσει τη γλώσσα όσο το δυνατόν πιο απλή. Ο προγραμματιστής της γλώσσας πήρε κάποιες άσκοπα περίπλοκες λειτουργίες της C ++ και τους έριξε έξω από το παράθυρο. Το αποτέλεσμα ήταν μια γλώσσα που ήταν κομψή και κομψή. Μερικοί άνθρωποι δήλωσαν ότι η γλώσσα ήταν πολύ κομψή.
Έτσι, μετά από αρκετά χρόνια συζήτησης και μάχης, η Java έγινε λίγο πιο περίπλοκη. Μέχρι το 2004, η Java είχε τύπους enum, ενισχυμένη για βρόχους, στατική εισαγωγή και μερικά άλλα ενδιαφέροντα νέα χαρακτηριστικά. Αλλά το νέο χαρακτηριστικό που μιλούσε περισσότερο ήταν η εισαγωγή γενόσημων φαρμάκων.
ArrayList άτομα = νέο ArrayList ();
Η χρήση οποιουδήποτε τύπου ήταν καινούργιου στην Java 5. 0. Σε παλαιά Java, θα γράφετε
ArrayList people = new ArrayList ();
Σε εκείνες τις ημέρες, ένα ArrayList θα μπορούσε να αποθηκεύσει σχεδόν οτιδήποτε θέλατε να το βάλετε - έναν αριθμό, έναν Λογαριασμό, ένα Δωμάτιο, ένα String … τίποτα. Η κατηγορία ArrayList ήταν πολύ ευπροσάρμοστη, αλλά με αυτήν την ευελιξία ήρθαν μερικοί πονοκεφάλοι. Αν μπορούσατε να βάλετε τίποτα σε ένα ArrayList, δεν θα μπορούσατε εύκολα να προβλέψετε τι θα βγάλετε από ένα ArrayList.
Συγκεκριμένα, δεν μπορείτε να γράψετε εύκολα κώδικα που υποθέτει ότι έχετε αποθηκεύσει ορισμένους τύπους τιμών στο ArrayList. Ακολουθεί ένα παράδειγμα:
ArrayList things = new ArrayList (); πράγματα. προσθέστε (νέο λογαριασμό ()); Λογαριασμός myAccount = πράγματα. get (0); // ΜΗΝ ΧΡΗΣΙΜΟΠΟΙΗΣΕΤΕ ΑΥΤΗ. Είναι κακό ΚΩΔΙΚΟΣ.
Στην τρίτη γραμμή, η κλήση για να πάρει (0) αρπάζει την παλαιότερη τιμή στη συλλογή στοιχείων. Η κλήση για να πάρει (0) είναι εντάξει, αλλά στη συνέχεια ο συντάκτης τσοκάρει την απόπειρα ανάθεσης στο myAccount. Έχετε ένα μήνυμα στην τρίτη γραμμή λέγοντας ότι οτιδήποτε παίρνετε από τη λίστα των πραγμάτων δεν μπορεί να γεμίσει στη μεταβλητή myAccount.
Λαμβάνετε αυτό το μήνυμα επειδή, από τη στιγμή που ο μεταγλωττιστής φτάνει στην τρίτη γραμμή, έχει ξεχάσει ότι το στοιχείο που προστέθηκε στη δεύτερη γραμμή ήταν τύπου Λογαριασμός!
Η εισαγωγή γενικών εντοπίζει αυτό το πρόβλημα:
ArrayList things = new ArrayList (); πράγματα. προσθέστε (νέο λογαριασμό ()); Λογαριασμός myAccount = πράγματα. get (0); // ΧΡΗΣΙΜΟΠΟΙΗΣΕΤΕ ΑΥΤΟ ΤΟ ΚΩΔΙΚΟ ΕΝΑΡΞΗΣ Είναι καλός κώδικας.
Η προσθήκη σε δύο μέρη λέει στον μεταγλωττιστή ότι τα στοιχεία αποθηκεύουν τις εμφανίσεις του λογαριασμού - τίποτα άλλο. Έτσι, στην τρίτη γραμμή στον προηγούμενο κώδικα, παίρνετε μια αξία από τη συλλογή πραγμάτων. Στη συνέχεια, επειδή τα πράγματα αποθηκεύουν μόνο αντικείμενα λογαριασμού, μπορείτε να κάνετε το myAccount να αναφερθεί σε αυτή τη νέα τιμή.
Java 5. 0 πρόσθεσε γενικά στη Java. Αλλά σύντομα μετά τη γέννηση της Java 5. 0, οι προγραμματιστές παρατήρησαν πόσο αδέξια μπορεί να είναι ο κώδικας για τα γενόσημα.Μετά από όλα, μπορείτε να δημιουργήσετε γενόσημα μέσα στα γενόσημα. Ένα ArrayList μπορεί να περιέχει μια δέσμη συστοιχιών, καθένα από τα οποία μπορεί να είναι ένα ArrayList. Έτσι μπορείτε να γράψετε
ArrayListmess = new ArrayList ();
Όλη η επανάληψη σε αυτή τη δήλωση χάος δίνει στους προγραμματιστές έναν πονοκέφαλο! Για να αποφύγετε αυτή την ασχήμια, οι εκδόσεις Java 7 και νεότερες εκδόσεις έχουν χειριστή διαμαντιών , . Ο χειριστής διαμαντιών λέει στην Java να επαναχρησιμοποιήσει ό, τι αλάνθαστα περίπλοκο υλικό που βάλατε στο προηγούμενο τμήμα της γενικής δήλωσης.
, παρόλο που γράφετεmess = new ArrayList(); Στην Java 7 και μεταγενέστερα, μπορείτε να γράψετε μία από αυτές τις δηλώσεις mess - την πρωτότυπη, δυσάρεστη δήλωση με δύο εμφανίσεις του ArrayList [] ή την απλοποιημένη δήλωση με τον διαχειριστή διαμαντιών και μόνο με ένα ArrayList [] περιστατικό.
Ναι, ο βελτιωμένος κώδικας εξακολουθεί να είναι περίπλοκος. Αλλά χωρίς την επανάληψη του ArrayList [], ο βελτιωμένος κώδικας είναι λιγότερο επαχθής. Ο χειριστής διαμαντιών Java 7 αφαιρεί μια ευκαιρία για να αντιγράψετε κάτι εσφαλμένα και να έχετε ένα μεγάλο λάθος στον κωδικό σας.