C# Generika haben keine Wildcards, da .NET -Generika Generika sind, die von CLR unterstützt werden, während Java JVM Generika, sondern nur Syntaxzucker unterstützt, und sie werden in Objekttypen umgewandelt, wenn sie vom Compiler kompiliert werden
Typ -Wildcards repräsentieren die übergeordnete Klasse der generischen Typen in Java
public void test (list <elofthob> c) {für (int i = 0; i <c.Size (); i ++) {System.out.println (C.Get (i)); }}// Erstellen Sie eine Liste <string> Objektliste <string> strlist = new ArrayList <string> (); // den vorherigen Testmethode -Test (STRLIST) Kalendate kalendieren;
Kompilieren Sie das obige Programm, und ein Kompilierungsfehler wird bei Test (STRLIST) auftritt, was bedeutet, dass die Liste <string> nicht als Unterklasse von List <Object> angesehen werden kann. Zu diesem Zeitpunkt müssen Sie die Art Wildcard verwenden, was ist ein?
Die obige Liste <Object> kann durch List <?> Ersetzt werden und dann kann es zusammengestellt werden
public void test (list <?> c) {für (int i = 0; i <c.Size (); i ++) {System.out.println (C.Get (i)); }}List <String> kann als Unterklasse von List <?> Verwendet werden.
Was ist, wenn Sie die übergeordnete Klasse von List <string> anstelle von List <int> sein möchten? Schreiben Sie es wie diese Liste <? erweitert String>
In C#ist dies die Art der Einschränkung
Klasse myclass <t, u> wobei t: Klasse wobei u: struct {} Schnittstelle ImyInterface {} Klasse Dictionary <Tkey, TVAL> WO TKEY: ICOMPARABLE, IENUMERBLETTE WO DEN TVAL: IMYInterface {public void add (tkey key, tval val) {}}Obergrenze für eingeschränkte generische Wildcards in Java:
// Geben Sie an, dass der t -Typ die Zahlenklasse oder ihre Unterklasse sein muss und die öffentliche Klasse von Java.io.ioSerializable -Schnittstelle implementiert wird.
Das obige ist der vollständige Inhalt des Vergleichs und der Analyse von Java Generic Wildcards und C# vom Herausgeber zu Ihnen gebracht. Ich hoffe, jeder unterstützt Wulin.com ~