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 !