Maison > Java > javaDidacticiel > le corps du texte

Résumé de l'utilisation des génériques en Java

高洛峰
Libérer: 2017-01-18 11:19:58
original
1381 Les gens l'ont consulté

Les exemples de cet article résument l'utilisation des génériques en Java. Partagez-le avec tout le monde pour votre référence. Les détails sont les suivants :

1 Utilisation de base

public interface List<E> {
 void add(E);
 Iterator<E> iterator();
}
Copier après la connexion

2 Génériques et sous-classes

Child est une sous-classe de Parent, List.
Par conséquent : List list = new ArrayList() est faux.
Si ce qui précède est correct, alors :

List<String> ls = new ArrayList<String>(); //1
List<Object> lo = ls; //2
lo.add(new Object()); // 3
String s = ls.get(0); // 4,将object转换为string将失败。
Copier après la connexion

3 caractères génériques

En raison de la raison 2, le résultat de l'implémentation suivante pour l'ensemble unifié est Non

void printCollection(Collection<Object> c) {
 for (Object o: c) {
 // do something
 }
}
Copier après la connexion

Par conséquent, le caractère générique ? est nécessaire :

void printCollection(Collection<?> c) {
 for (Object o: c) { // 1
 // do something
 }
} // ok
Copier après la connexion

Le ? signifie ici que le type est inconnu, mais que tout objet est un objet, donc l'exemple ci-dessus Le 1 est correct. Mais l'exemple suivant est faux :

void add(Collection<? extends MyClass> c) {
 c.add(new MyClass()); // wrong
} // ok
Copier après la connexion

La raison est également très claire, ? extends MyClass indique que le type est une sous-classe de MyClass, mais le type spécifique n'est pas connu

4. Méthode générique

L'exemple ci-dessus peut être implémenté comme :

<T> add(Collection<T> c, T t) {
 c.add(t);
}
Copier après la connexion

Le compilateur aidera à la conversion de type tout en garantissant la sémantique.

5. Comparaison du runtime générique

List<String> l1 = new ArrayList<String>();
List<Integer> l2 = new ArrayList<Integer>();
System.out.println(l1.getClass() == l2.getClass()); // true
Copier après la connexion

Parce que le runtime des classes génériques est le même.

6 Tableaux génériques (potentiellement dangereux de type)

List<String>[] lsa = new ArrayList<String>[10]; // error
Copier après la connexion

Peut être dangereux de type si possible. Tels que :

Object o = lsa;
Object []oa = (Object[])o;
List<Integer> li = new ArrayList<Integer>();
li.add(new Integer(3));
oa[1] = li;
String s = lsa[1].get(0); // runtime error
Copier après la connexion

J'espère que cet article sera utile à la programmation Java de chacun.

Pour plus d'articles liés au résumé de l'utilisation des génériques en Java, veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal