1. Das grundlegende Konzept der Generika
Wie C#hat Java das Konzept der Generika und der Parametrisierung von Typen. Generika in Java erscheinen nach JDK5.0, aber Generika in Java unterscheiden sich im Wesentlichen von den Generika in C#. Erstens sind ArrayList <GearrayList <string> in Java aus der Perspektive der Sammlungstypen denselben Typ. Das Löschen des Typs wird während der Zusammenstellung durchgeführt, und die Typen in Java sind Pseudogeneriker. Pseudogeneriker werden später eingeführt. Zweitens wird int zuerst in ein ganzzahliges Objekt konvertiert, wenn es zu einem Ganzzahl -Objekt umgewandelt wird, wenn wir den Boxbetrieb normalerweise in ein ganzzahliges Objekt aufnehmen. Bei der Ausnahme von Elementen muss das Interger -Objekt in einen int -Wert -Typ konvertiert werden, dh Unboxing -Operation. In C#sind List <St> und List <string> unterschiedliche Typen. Die generischen Parameter werden nach der Zusammenstellung ein Platzhalter sein und nicht gelöscht. Sie werden zur Laufzeit echte Typen zugewiesen. Sie werden während der Systemlaufzeit generiert und verfügen über eigene virtuelle Methodentabellen und Typdaten. Diese Implementierung wird als Typinflation bezeichnet (für die Typinflation hat der Instant Compiler viele Optimierungsarbeiten durchgeführt, um dieses Problem zu lösen). Dies ist die sogenannte wahre Generika. Gleichzeitig ist beim Hinzufügen grundlegender Elemente wie int zu einer Sammlung kein Box erforderlich, und es ist bei der Ausnahme von Elementen kein Unboxing erforderlich. Daher ist die Leistung besser als Java Collection Generics.
Die Einführung von Generika in Java dient hauptsächlich zur Lösung von zwei Problemen: 1. Typ-Ersatzausnahmen treten während der Laufzeit des Sammlungstypelements auf, und während des Kompilierungs-Zeit-Typs werden Typprüfungen hinzugefügt. 2. Wiederholen Sie das Schreiben von Code während der Lösung, und der Algorithmus kann wiederverwendet werden. Das Folgende ist ein Beispiel, um die Typprüfung des Compilers zu veranschaulichen.
Schauen wir uns zunächst ein Beispiel an, in dem Generika nicht verwendet werden:
ArrayList al = new ArrayList (); al.add ("ABC"); al.add ("124"); al.add ("32l");Wir können alle Datenarten zur AL -Sammlung hinzufügen. Wenn wir den Typ beim Abrufen der Daten konvertieren müssen, z. B.:
String s = (String) al.get (0); String S1 = (String) al.get (1); // In der Laufzeit wird ein Fehler gemeldet und der Typ -Konvertierungsfehler ist lang l = (lang) al.get (2);
Daraus können wir sehen, dass die Typ -Überprüfung während der Zusammenstellung reduziert wird, wenn keine Generika vorhanden sind. Bei der Erstellung von Elementen müssen Programmierer die Arten jedes Elements kennen, da ansonsten eine Ausnahme der Typumwandlung zur Laufzeit auftreten kann.
Schauen wir uns also die Vorteile an, die es uns durch generische Sammlungen bringt.
ArrayList <string> al1 = new ArrayList <string> (); al1.add ("abc"); al1.add (1); // Bei der Kompilierung trat ein Fehler auf,Wenn wir AL1 mit dem String -Parametertyp instanziieren, können wir kein INT -Element hinzufügen, andernfalls meldet der Compiler einen Fehler. Normalerweise gibt es im IDE -Editor eine Fehlermarke wie Eclipse. Gleichzeitig müssen bei der Extraktion des Elements keine Konvertierung eingetragen werden.
String value = al1.get (0); // Es ist keine Typkonvertierung erforderlich
Dies ist der Vorteil von Generika.
Anschließend spiegelt sich die Multiplexierung von Algorithmen hauptsächlich in der Multiplexierung von Methoden wider, z.
2. Verwendung von Generika
Generika in Java werden hauptsächlich in Klassen, Methoden und Schnittstellen verwendet. Schauen wir uns zunächst einen kurzen Blick auf die Verwendung der Klasse:
Klassenfabrik <t> {private t -Wert; public t getValue () {Rückgabewert; } public void setValue (t v) {this.Value = v; }}Testmethode hinzufügen:
Fabrik <string> f = new factory <string> (); F.SetValue ("Fabrik in Gebrauch"); System.out.println (f.getValue ());Verwendung generischer Schnittstellen:
Schnittstelle myInterface <t, u> {void show (t t, u u); } class showtest implementiert myInterface <String, Integer> {@Override public void show (String t, Integer u) {System.out.println (t); System.out.println (u); }}Wenn ein generischer Typparameter in einer Klasse wirkt, schränkt er hauptsächlich die Typenbeschränkungen zwischen mehreren Feldern und Methodensignaturen ein. Beim Eingehen einer Methode werden die Hauptbeschränkungen für mehrere Parameter der Methode vorgenommen. Hier erhalten die generischen Typparameter der Methode keine Beispiele mehr. Lassen Sie uns hauptsächlich die Einschränkungen der folgenden Typparameter einführen.
3. Typ Parameterbeschränkungen
Schauen wir uns ein kleines Beispiel an, wie im folgenden Code gezeigt:
public static <t> T get (t t1, t t2) {if (t1.comPareto (t2)> = 0); // Kompilierungsfehler, die Methode Vergleiche (t) ist für den Typ T. return t1 nicht definiert; }Sie können die Compiler -Fehlermeldung sehen. Die Vergleichsmethode ist für Typ T nicht definiert. Wenn die Typen in Java verglichen werden müssen, muss die vergleichbare Schnittstelle implementiert werden, sodass die Methode überschrieben wird. Dann stellen wir die folgenden Änderungen vor:
public static <t erweitert vergleichbar> T GET (T T1, T T2) {// Typ -Einschränkung hinzufügen if (t1.comPareto (t2)> = 0); return t1; }Durch das Qualifying T erweitert sich vergleichbar, zeigt es, dass T die Art der Schnittstelle ist, die vergleichbar implementiert und daher auch die Vergleichsmethode implementiert, sodass es keine Kompilierungs-Zeit-Fehler gibt.
Wenn wir mehrere Einschränkungen von Typen verwenden und segmentieren, können wir die begrenzten Schlüsselwörter verwenden und segmentieren, und nur Erweiterungen können verwendet werden. Gleichzeitig kann die Klasse nur zuerst platziert werden, wenn sowohl Schnittstellen als auch Typen existieren, und kann nur eine haben, wie unten gezeigt:
<T erweitert Objekt & vergleichbar & serialisierbar>
In dem obigen Artikel werden kurz die Rolle und die grundlegenden Konzepte von Java Generics erörtert, der der Inhalt ist, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.