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
class Gen<T> {
T ob;
Gen(T o) {
ob = o;
}
T getOb() {
return ob;
}
}
Nach dem Login kopieren
- Code nach dem Löschen (wie der Compiler ihn umwandelt):
class Gen {
Object ob;
Gen(Object o) {
ob = o;
}
Object getOb() {
return ob;
}
}
Nach dem Login kopieren
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!