Διαδρομές
/
Java
Java
/
Ύλη
/
Γενικοί τύποι
Γε

Γενικοί τύποι σε Java

11 ασκήσεις

Σχετικά με την έννοια Γενικοί τύποι

Ένας γενικός τύπος είναι μια γενική κλάση ή διεπαφή που παραμετροποιείται ως προς τους τύπους. Αυτό επιτρέπει στον μεταγλωττιστή να επιβάλλει την ασφάλεια τύπων στην κλάση ή τη διεπαφή.

Δες αυτή τη μη γενική διεπαφή Container:

class Container {
    private Object object;

    public void set(Object object) { this.object = object; }
    public Object get() { return object; }
}

Επειδή δέχεται και επιστρέφει τύπους Object, λειτουργεί με οποιονδήποτε μη πρωτογενή τύπο. Ωστόσο, αυτό έχει κόστος, γιατί κάποιος κώδικας μπορεί να καλέσει τη get περιμένοντας Integer, ενώ άλλος κώδικας καλεί τη set προσθέτοντας String, με αποτέλεσμα μια εξαίρεση κατά την εκτέλεση.

Μια γενική κλάση και μια γενική διεπαφή έχουν την εξής μορφή:

class ClassName<T1, T2, ..., Tn> { ... }
interface InterfaceName<T1, T2, ..., Tn> { ... }

Το τμήμα των παραμέτρων τύπου, που οριοθετείται από γωνιακές αγκύλες (<>) και ακολουθεί το όνομα της κλάσης ή της διεπαφής, καθορίζει τις παραμέτρους τύπου (που ονομάζονται και μεταβλητές τύπου) T1, T2, ..., και Tn. Αυτές μπορούν να χρησιμοποιηθούν μέσα στο σώμα της κλάσης ή της διεπαφής, για να έχεις ασφάλεια τύπων με γενικούς τύπους.

Ακολουθεί η γενική έκδοση του Container:

class Container<E> {
    private E object;

    public void set(E object) { this.object = object; }
    public E get() { return object; }
}

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

// empty <> can infer from context
Container<String> stringContainer = new Container<>();
// compiler knows this is a String, so it is allowed
stringContainer.set("Some string");
// no cast needed, compiler knows it is a String
String result = stringContainer.get();
// this causes a compiler error:
stringContainer.set(42);
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα

Μάθε την έννοια Γενικοί τύποι