Heim  >  Artikel  >  Java  >  Zusammenfassung der Verwendung von Generika in Java

Zusammenfassung der Verwendung von Generika in Java

高洛峰
高洛峰Original
2017-01-18 11:19:581343Durchsuche

Die Beispiele in diesem Artikel fassen die Verwendung von Generika in Java zusammen. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

1 Grundlegende Verwendung

public interface List<E> {
 void add(E);
 Iterator<E> iterator();
}

2 Generics und Unterklassen

Child ist eine Unterklasse von Parent, Listbca3c305396ecbc247bea2d0582ce4a9.
Deshalb ist Lista87fdacec66f0909fc0757c19f2d2b1d list = new ArrayListf7e83be87db5cd2d9a8a0b8117b38cd4() falsch.
Wenn das Obige korrekt ist, dann:

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 Platzhalter

Aus Grund 2 lautet die Ausgabe der folgenden Implementierung für die einheitliche Menge Nein

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

Daher wird das Platzhalterzeichen ? benötigt:

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

Das ? bedeutet hier, dass der Typ unbekannt ist, aber jedes Objekt ein Objekt ist. also das obige Beispiel Die 1 ist richtig. Aber das folgende Beispiel ist falsch:

void add(Collection<? extends MyClass> c) {
 c.add(new MyClass()); // wrong
} // ok

Der Grund ist auch sehr klar: ? erweitert MyClass zeigt an, dass der Typ eine Unterklasse von MyClass ist, der spezifische Typ jedoch nicht bekannt ist

4. Generische Methode

Das obige Beispiel kann wie folgt implementiert werden:

<T> add(Collection<T> c, T t) {
 c.add(t);
}

Der Compiler hilft bei der Typkonvertierung und stellt gleichzeitig die Semantik sicher.

5. Vergleich der generischen Laufzeit

List<String> l1 = new ArrayList<String>();
List<Integer> l2 = new ArrayList<Integer>();
System.out.println(l1.getClass() == l2.getClass()); // true

Weil die Laufzeit generischer Klassen gleich ist.

6 Generische Arrays (potenziell typunsicher)

List<String>[] lsa = new ArrayList<String>[10]; // error

Kann nach Möglichkeit typunsicher sein. Zum Beispiel:

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

Ich hoffe, dass dieser Artikel für die Java-Programmierung aller hilfreich sein wird.

Weitere Artikel zur Zusammenfassung der Verwendung von Generika in Java finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn