Avant Java SE 1.5, en l'absence de génériques, le paramètre "arbitraire" était réalisé par référence au type Object. L'inconvénient de "arbitraire" était de faire une conversion de type obligatoire explicite , et cela La conversion est requise lorsque le développeur peut prédire le type de paramètre réel . Dans le cas d' erreurs de conversion de type forcées , le compilateur peut ne pas inviter l'erreur et l'exception se produit uniquement lors de l'exécution, ce qui représente un risque pour la sécurité.
public class Gen <T> { private T ob; // Définir les variables membres génériques public Gen (T ob) { this .ob = ob; } public T getOb () { return ob; } public void setOb (T ob) { this .ob = ob; } public void showType () { System.out.println ( "Le type réel de T est:" + ob.getClass (). getName ()); } }
classe publique GenDemo { public static void main (String [] args) { // Définissez une version Integer de la classe générique Gen Gen <Integer> intOb = new Gen <Integer> (88 ); intOb.showType (); int i = intOb.getOb (); System.out.println ( "value =" + i); System.out.println ( "----------------------- ----------- " ); // Définir une version String de la classe générique Gen Gen <String> strOb = new Gen <String> (" Hello Gen! " ); StrOb.showType (); String s =strOb.getOb (); System.out.println ( "value =" + s); } }
En un mot
, l'avantage des génériques est que la sécurité des types est vérifiée au moment de la compilation , et toute contrainte est automatique et implicite , ce qui améliore le taux de réutilisation du code et n'a pas à être forcé comme Object.