Heim Java javaLernprogramm Ein genauerer Blick auf Generika in Java

Ein genauerer Blick auf Generika in Java

Jul 18, 2017 am 09:47 AM
java 基础

Definition von Generics: Generics sind eine neue Funktion von JDK 1.5, und ihr Kern besteht in der Anwendung parametrisierter Typen (parametrisierter Typ). Das heißt, der Datentyp, der bearbeitet wird, wird als Parameter angegeben und der spezifische Typ wird bei Verwendung angegeben. Dieser Parametertyp kann bei der Erstellung von Klassen, Schnittstellen und Methoden verwendet werden, die als generische Klassen, generische Schnittstellen bzw. generische Methoden bezeichnet werden.

Die Idee der Generika begann bereits in den Vorlagen der C++-Sprache Fuß zu fassen. Als die Java-Sprache in einer Version war, in der es noch keine Generika gab, konnte nur Object verwendet werden Als übergeordnete Klasse aller Typen kann eine Typverallgemeinerung durch die Kombination der beiden Merkmale des Typzwangs erreicht werden. Beim Zugriff auf Hash-Tabellen wurde beispielsweise die Methode get() von HashMap vor JDK 1.5 verwendet. Der Rückgabewert ist ein Object-Objekt, da alle Typen in der Java-Sprache von java.lang.Object erben in jedes beliebige Objekt verwandelt werden kann. Da es aber unendlich viele Möglichkeiten gibt, wissen nur der Programmierer und die virtuelle Maschine zur Laufzeit, um welche Art von Objekt es sich bei diesem Objekt handelt. Während der Kompilierung kann der Compiler nicht überprüfen, ob die erzwungene Transformation dieses Objekts erfolgreich ist. Wenn der Programmierer sich ausschließlich darauf verlässt, die Korrektheit dieser Operation sicherzustellen, werden viele Risiken von ClassCastException auf die Programmlaufzeit übertragen.

Die Verwendung generischer Technologie in C# und Java scheint gleich zu sein, es gibt jedoch grundlegende Unterschiede in der Implementierung. In C# werden Generika sowohl im Programmquellcode als auch in der kompilierten IL (Intermediate Language) verwendet. ., Zwischensprache, derzeit ein Platzhalter) oder in der CLR zur Laufzeit sind zwei verschiedene Typen, die während der Systemlaufzeit generiert werden Daten wird diese Implementierung als Typinflation bezeichnet, und die auf dieser Methode implementierten Generika werden als echte Generika bezeichnet.

Generics in der Java-Sprache sind anders. Sie sind nur im Programmquellcode vorhanden und wurden durch den ursprünglichen Rohtyp (Raw Type, auch als Naked Type bekannt) ersetzt Der Umwandlungscode wird an der entsprechenden Stelle eingefügt, daher sind ArrayList für die Laufzeit-Java-Sprache dieselbe Klasse. Daher ist die generische Technologie tatsächlich ein syntaktischer Zucker der Java-Sprache. Die generische Implementierungsmethode in der Java-Sprache wird als Typlöschung bezeichnet, und die auf dieser Methode implementierten Generika werden als Pseudo-Generika bezeichnet. (Typlöschung wird später untersucht)

Mit dem generischen Mechanismus geschriebener Programmcode ist sicherer und sicherer als Code, der Objektvariablen unordentlich verwendet und dann eine erzwungene Typumwandlung durchführt. Generika sind besonders nützlich für Sammlungsklassen.

1. Warum Generika verwenden

Hier sehen wir uns einen Code an;

List list = new ArrayList();  
list.add("CSDN_SEU_Cavin");  
list.add(100);  
for (int i = 0; i < list.size(); i++) {  
  String name = (String) list.get(i); //取出Integer时,运行时出现异常  
System.out.println("name:" + name);  
}
Nach dem Login kopieren

Dieses Beispiel A Der Listentypsammlung werden ein Wert vom Typ „String“ und ein Wert vom Typ „Integer“ hinzugefügt. (Dies ist zulässig, da der Standardtyp der Liste „Objekt“ ist). In der nachfolgenden Schleife tritt zur Laufzeit eine java.lang.ClassCastException-Ausnahme auf, weil vergessen wurde, der Liste zuvor einen Wert vom Typ „Integer“ hinzuzufügen, oder aus anderen Gründen. Um dieses Problem zu lösen, wurden Generika entwickelt.

2. Verwendung von Generika

Generika ermöglichen Programmierern die Verwendung der Typabstraktion, die normalerweise in Sammlungen verwendet wird.

List<String> list = new ArrayList<String>();
Nach dem Login kopieren

So geschrieben, meldet die obige Methode zur Schleifenwerterfassung keinen Fehler und es ist keine Typkonvertierung erforderlich. Durch List wird direkt eingeschränkt, dass die Listensammlung nur Elemente vom Typ String enthalten kann.

3. Generika sind nur während der Kompilierung gültig

Wir müssen auch verstehen, was bei der Verwendung von Generika passiert werden kompiliert, daher müssen wir hier besonders darauf achten: Generika sind nur gültig, wenn der Code in eine Klassendatei kompiliert wird

AyyayList<String> a = new ArrayList<String>();  
ArrayList b = new ArrayList();  
Class c1 = a.getClass();  
Class c2 = b.getClass();  
System.out.println(a == b);
Nach dem Login kopieren

Ausgabe des obigen Programms Das Ergebnis ist WAHR. Dies liegt daran, dass alle Reflexionsvorgänge zur Laufzeit ausgeführt werden. Dies beweist, dass das Programm nach der Kompilierung Degenerisierungsmaßnahmen ergreift.

Mit anderen Worten: Generika in Java sind nur während der Kompilierungsphase gültig. Während des Kompilierungsprozesses werden nach korrekter Überprüfung der generischen Ergebnisse die relevanten Informationen der generischen Elemente gelöscht und an den Grenzen der Eingangs- und Ausgangsmethoden des Objekts werden Methoden zur Typprüfung und Typkonvertierung hinzugefügt. Mit anderen Worten: Die erfolgreich kompilierte Klassendatei enthält keine allgemeinen Informationen. Allgemeine Informationen gelangen nicht in die Laufzeitphase .

Der folgende Code erklärt sehr gut, dass Generika nur während der Kompilierung durch den Reflexionsmechanismus von Java gültig sind

ArrayList<String> a = new ArrayList<String>();  
a.add("CSDN_SEU_Cavin");  
Class c = a.getClass();  
try{  
    Method method = c.getMethod("add",Object.class);  
    method.invoke(a,100);  
    System.out.println(a);  //[CSDN_SEU_Cavin, }catch(Exception e){  
    e.printStackTrace();
Nach dem Login kopieren

 4 Methoden

public static class FX<T> {  
    private T ob; // 定义泛型成员变量  
  
    public FX(T ob) {  
        this.ob = ob;  
    }  
  
    public T getOb() {  
        return ob;  
    }  
  
    public void showTyep() {  
        System.out.println("T的实际类型是: " + ob.getClass().getName());  
    }  
}  
    public static void main(String[] args) {  
        FX<Integer> intOb = new FX<Integer>(100);  
        intOb.showTyep();  
        System.out.println("value= " + intOb.getOb());  //java.lang.Integer  System.out.println("----------------------------------");  
  
        FX<String> strOb = new FX<String>("CSDN_SEU_Calvin");  
        strOb.showTyep();  
        System.out.println("value= " + strOb.getOb());  //value= 100 } 
  
Nach dem Login kopieren

 5. Vorteile von Generika

  (1) Typensicherheit.

Durch die Kenntnis der Typbeschränkungen von Variablen, die mithilfe von Generika definiert wurden, kann der Compiler die Typsicherheit von Java-Programmen effektiver verbessern.

  (2) Beseitigen Sie die erzwungene Typkonvertierung.

Eliminieren Sie viele Umwandlungen im Quellcode. Dadurch wird der Code besser lesbar und die Fehlerwahrscheinlichkeit verringert. Alle Umwandlungen erfolgen automatisch und implizit.

 (3) Leistung verbessern

Das obige ist der detaillierte Inhalt vonEin genauerer Blick auf Generika in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Zeitstempel für Datum in Java Zeitstempel für Datum in Java Aug 30, 2024 pm 04:28 PM

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Java -Programm, um das Kapselvolumen zu finden Java -Programm, um das Kapselvolumen zu finden Feb 07, 2025 am 11:37 AM

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4

Gestalten Sie die Zukunft: Java-Programmierung für absolute Anfänger Gestalten Sie die Zukunft: Java-Programmierung für absolute Anfänger Oct 13, 2024 pm 01:32 PM

Java ist eine beliebte Programmiersprache, die sowohl von Anfängern als auch von erfahrenen Entwicklern erlernt werden kann. Dieses Tutorial beginnt mit grundlegenden Konzepten und geht dann weiter zu fortgeschrittenen Themen. Nach der Installation des Java Development Kit können Sie das Programmieren üben, indem Sie ein einfaches „Hello, World!“-Programm erstellen. Nachdem Sie den Code verstanden haben, verwenden Sie die Eingabeaufforderung, um das Programm zu kompilieren und auszuführen. Auf der Konsole wird „Hello, World!“ ausgegeben. Mit dem Erlernen von Java beginnt Ihre Programmierreise, und wenn Sie Ihre Kenntnisse vertiefen, können Sie komplexere Anwendungen erstellen.

See all articles