Heim > Java > javaLernprogramm > Der generische Java-Wildcard erweitert und super

Der generische Java-Wildcard erweitert und super

高洛峰
Freigeben: 2016-12-19 15:57:30
Original
1452 Leute haben es durchsucht

Java Generics

Schlüsselwortbeschreibung

? Oder eine Unterklasse von T

extends Beispiel

statische Klasse Food{}

statische Klasse Fruit erweitert Food{}

statische Klasse Apple erweitert Fruit{}
statische Klasse RedApple erweitert Apple{}

List flist = new ArrayList();
// complie error:
// flist.add(new Apple());
// flist.add (new Fruit());
// flist.add(new Object());
flist.add(null); // funktioniert nur für null



List bedeutet „eine Liste mit einem beliebigen von Fruit geerbten Typ“. Sie können null hinzufügen, da null jeden Typ darstellen kann. Die Add-Methode von List kann also keine sinnvollen Elemente hinzufügen, kann aber Zuweisungen von vorhandenen Subtypen List akzeptieren.

Fruit Fruit = flist.get(0);

Apple apple = (Apple)flist.get(0);



Aufgrund dessen, wo die Platzierung von Fruit geerbt wird Typ, sodass der Fruchttyp sicher entfernt werden kann.

flist.contains(new Fruit());

flist.contains(new Apple());



Wenn Sie die Methode „contains“ in der Sammlung verwenden, akzeptieren Sie den Parameter „Object“. Der Typ muss keine Platzhalter enthalten und der Compiler lässt solche Aufrufe zu.

super example

List flist = new ArrayList();

flist.add(new Fruit());

flist.add( new Apple());
flist.add(new RedApple());

// Kompilierungsfehler:
List flist = new ArrayList();


Liste bedeutet „eine Liste mit einem beliebigen Obst-Supertyp“, daher ist es sicher, Obst und seine Untertypen hinzuzufügen. Da der Typ in List der Supertyp einer beliebigen Frucht sein kann, kann er nicht dem Untertyp Fruit Apple's List zugeordnet werden.

// Kompilierungsfehler:

Fruchtelement = flist .get(0);



Da der Typ in List ein beliebiger Supertyp von Fruit sein kann, kann der Compiler nicht bestimmen, ob der von get zurückgegebene Objekttyp Fruit oder Fruit ist . Übergeordnete Klasse Food oder Object.

Zusammenfassung

Extends können für die Rückgabetypqualifizierung verwendet werden, können jedoch nicht für die Parametertypqualifizierung verwendet werden.

super kann zur Parametertypqualifizierung verwendet werden, kann jedoch nicht zur Rückgabetypqualifizierung verwendet werden.

> Platzhalter mit Super-Supertyp-Qualifikation können in generische Objekte geschrieben werden, und Platzhalter mit erweiterter Subtyp-Qualifikation können aus generischen Objekten gelesen werden.




Weitere Artikel zu generischen Java-Wildcard-Erweiterungen und Super finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage