Löschen

Linda Hamilton
Linda HamiltonOriginal
2024-12-30 15:15:10672Durchsuche

Erasure (Apagamento de Tipos)

Was ist Löschung?
- Erasure ist die von Java verwendete Technik zur Implementierung von Generika, die die Abwärtskompatibilität mit früheren Versionen der Sprache gewährleistet.

  • Während der Kompilierung werden alle generischen Typinformationen *entfernt *(oder „gelöscht“).

2. Motivation für die Verwendung von Erasure
Kompatibilität mit Legacy-Codes:

  • Die Einführung von Generika in Java (JDK 5) sollte älteren Code nicht ungültig machen.
  • Das Design von Generika musste sicherstellen, dass sowohl generischer als auch nicht generischer Code reibungslos zusammenarbeiten.

Angemessene Zwänge:

  • Der Compiler fügt Zwänge hinzu, um die Typkompatibilität mit den angegebenen Argumenten sicherzustellen.
  • Informationen aus generischen Typen entfernen:
  • Typparameter existieren nur im Quellcode, nicht jedoch zur Laufzeit.

4. Beispiel für Löschung in Aktion

  • Generischer Code:
class Gen<T> {
    T ob;

    Gen(T o) {
        ob = o;
    }

    T getOb() {
        return ob;
    }
}

  • Code nach dem Löschen (wie der Compiler ihn umwandelt):
class Gen {
    Object ob;

    Gen(Object o) {
        ob = o;
    }

    Object getOb() {
        return ob;
    }
}

Hinweise:

  • Der Typparameter wird durch Object ersetzt.
  • Im generierten Code sind keine allgemeinen Informationen verfügbar.

5. Einschränkungen der Löschung
Fehlende Typinformationen zur Laufzeit:

  • Generische Typen sind ein Quellcodemechanismus und existieren nach der Kompilierung nicht.

Nicht möglich:

  • Erhalten Sie den generischen Typ einer Instanz zur Laufzeit.
  • Das direkte Erstellen von Instanzen generischer Typen (z. B. new T() ist nicht zulässig).

6. Praktische Auswirkungen

Löschung erklärt:

  • Warum Generika keine Überladung haben: Methoden mit Signaturen, die sich nur durch generische Typen unterscheiden, sind nicht zulässig.
  • Warum ist es nicht möglich, primitive Typen direkt in Generika zu verwenden (z. B.: Gen ist ungültig; Sie müssen Gen verwenden).

Sicherheit zur Kompilierungszeit:

  • Obwohl Typinformationen gelöscht werden, prüft der Compiler während der Kompilierung die Typkompatibilität.

7. Fazit

  • Durch die Verwendung von Erasure konnten Generika zu Java hinzugefügt werden, ohne die Abwärtskompatibilität zu beeinträchtigen.
  • Trotz einiger Einschränkungen bieten Generika Typsicherheit zur Kompilierungszeit, während der generierte Code mit früheren Versionen der JVM kompatibel bleibt.

Das obige ist der detaillierte Inhalt vonLöschen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen 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