Middle
Qu'est-ce que les génériques ?
sobes.tech IA
Réponse de l'IA
Les génériques sont un mécanisme permettant d’écrire des classes, interfaces et méthodes qui fonctionnent avec des données de différents types, tout en assurant la sécurité de type lors de la compilation. Ils permettent de créer des composants réutilisables pouvant fonctionner avec n’importe quel type de données, sans perdre d’informations sur le type, ce qui minimise les erreurs de conversion de type à l’exécution.
Principaux avantages :
- Sécurité de type : Le compilateur vérifie la bonne utilisation des types dans les structures génériques.
- Réduction du code : Une seule classe ou méthode générique peut fonctionner avec plusieurs types.
- Lisibilité du code : Il est clair avec quels types le composant travaille.
- Amélioration des performances (dans certains cas) : L’absence de conversions de types à l’exécution peut légèrement améliorer les performances.
Exemple (Java) :
// Exemple de classe générique
class Box<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}
// Utilisation de la classe générique avec différents types
Box<Integer> integerBox = new Box<>();
integerBox.setContent(10);
int value = integerBox.getContent(); // Sécurité de type, pas besoin de conversion en int
Box<String> stringBox = new Box<>();
stringBox.setContent("Hello");
String text = stringBox.getContent(); // Sécurité de type, pas besoin de conversion en String
Exemple (Python - Type Hinting, approché des Generics) :
from typing import TypeVar, Generic
T = TypeVar('T')
class Box(Generic[T]):
def __init__(self) -> None:
self._content: T | None = None
def set_content(self, content: T) -> None:
self._content = content
def get_content(self) -> T | None:
return self._content
# Utilisation avec type hinting
integer_box: Box[int] = Box()
integer_box.set_content(10)
value: int | None = integer_box.get_content() # Aide aux outils d’analyse statique
string_box: Box[str] = Box()
string_box.set_content("Hello")
text: str | None = string_box.get_content() # Aide aux outils d’analyse statique