Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Java

Maîtriser les génériques Java : Construire du code réutilisable et type-safe

Maîtriser les génériques Java : Construire du code réutilisable et type-safe

Les génériques Java permettent d'écrire une seule classe, interface ou méthode opérant sur de nombreux types de données différents, tout en conservant la sécurité de typage à la compilation.

Note : Les génériques ne fonctionnent pas avec les types primitifs (int, float, char, etc.).


Classe générique Java

En déclarant un paramètre de type, vous créez une classe fonctionnant avec n'importe quel type d'objet.

Exemple : Création d'une classe générique

class Main {
    public static void main(String[] args) {
        ClasseGenerique<Integer> objEntier = new ClasseGenerique<>(5);
        System.out.println("Classe générique renvoie : " + objEntier.getDonnee());
        ClasseGenerique<String> objChaine = new ClasseGenerique<>("Programmation Java");
        System.out.println("Classe générique renvoie : " + objChaine.getDonnee());
    }
}

class ClasseGenerique<T> {
    private T donnee;
    public ClasseGenerique(T donnee) {
        this.donnee = donnee;
    }
    public T getDonnee() {
        return this.donnee;
    }
}

Sortie

Classe générique renvoie : 5
Classe générique renvoie : Programmation Java

ClasseGenerique est une classe générique où T est le paramètre de type. Deux instances sont créées :


Méthode générique Java

Les méthodes peuvent aussi être génériques, acceptant tout type d'argument tout en conservant la sécurité de typage.

Exemple : Création d'une méthode générique

class Main {
    public static void main(String[] args) {
        ClasseDemo demo = new ClasseDemo();
        demo.<String>methodeGenerique("Programmation Java");
        demo.<Integer>methodeGenerique(25);
    }
}

class ClasseDemo {
    public <T> void methodeGenerique(T donnee) {
        System.out.println("Méthode générique :");
        System.out.println("Donnée passée : " + donnee);
    }
}

Sortie

Méthode générique :
Donnée passée : Programmation Java
Méthode générique :
Donnée passée : 25

Quand le compilateur peut inférer le type, vous pouvez omettre l'argument de type explicite :

demo.methodeGenerique("Programmation Java");

Types bornés (Bounded Types)

Parfois vous voulez qu'un type générique n'accepte qu'une famille spécifique de classes. Les types bornés y parviennent avec le mot-clé extends.

Syntaxe : <T extends A> – T peut être A ou tout sous-type de A.

Exemple : Types bornés

class ClasseGenerique <T extends Number> {
    public void afficher() {
        System.out.println("Ceci est une classe générique à type borné.");
    }
}

class Main {
    public static void main(String[] args) {
        // ClasseGenerique<String> obj = new ClasseGenerique<>(); // erreur de compilation
    }
}

Ici, ClasseGenerique n'accepte que les types numériques (Integer, Double, etc.). Tenter de l'instancier avec String cause une erreur de compilation :

ClasseGenerique<String> obj = new ClasseGenerique<>();
^ reason: inference variable T has incompatible bounds equality constraints: String lower bounds: Number where T is a type-variable: T extends Number declared in class ClasseGenerique

Avantages des génériques Java

1. Réutilisabilité du code

Le code générique opère sur plusieurs types de données, réduisant la duplication. Une seule méthode peut traiter entiers, chaînes et objets personnalisés.

2. Vérification de type à la compilation

Le paramètre de type étant connu à la compilation, le compilateur détecte les incompatibilités de type avant l'exécution.

3. Intégration transparente avec les Collections

Le framework de collections Java est basé sur les génériques, permettant aux collections d'imposer la sécurité de typage. Exemples :

ArrayList<String> liste1 = new ArrayList<>();
ArrayList<Integer> liste2 = new ArrayList<>();

Autres classes de collection (LinkedList, Queue, Map, etc.) utilisent aussi les génériques pour les mêmes bénéfices.

Java

  1. Comprendre le mot-clé final en Java : variables, méthodes et classes
  2. L'opérateur instanceof en Java : guide complet
  3. Maîtriser l'héritage Java : concepts, types et exemples pratiques
  4. Comprendre les classes imbriquées statiques en Java : utilisation, différences et exemples
  5. Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
  6. Le pattern Singleton en Java expliqué : implémentation et utilisation sûre
  7. Maîtriser la réflexion Java : inspection des classes, méthodes et champs à l'exécution
  8. Maîtriser Java ObjectOutputStream : Sérialisation, méthodes et exemples pratiques
  9. Maîtriser les opérations sur les fichiers Java avec java.io – Création, lecture, écriture et suppression