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

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

高洛峰
高洛峰original
2017-01-18 11:19:581383parcourir

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();
}

2 Génériques et sous-classes

Child est une sous-classe de Parent, List21991039d82074b865eba0b3bbf2c2e7.
Par conséquent : Lista87fdacec66f0909fc0757c19f2d2b1d list = new ArrayListf7e83be87db5cd2d9a8a0b8117b38cd4() 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将失败。

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
 }
}

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

void printCollection(Collection<?> c) {
 for (Object o: c) { // 1
 // do something
 }
} // ok

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

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);
}

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

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

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

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 !

Déclaration:
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