Type Erasure und Raw Types

Intermediate Algorithmen und Datenstrukturen Deutsch
Also available: English
Created by Best · 16.08.2026 at 09:13 UTC

Type Erasure: Typparameter werden zur Laufzeit entfernt oder durch Bounds ersetzt. Deshalb sind new T() und Arrays von T problematisch.

Raw Types (List ohne <...>) existieren für Altcode. Der Compiler warnt; man verliert die Typprüfung.

In neuem Code Raw Types vermeiden und mit parametrisierten Typen arbeiten.

Löschung der Typparameter: JLS 4.6 [1].

$$\mathrm{erase}(\mathtt{List\lt E\gt })=\mathtt{List}$$

Wo gebraucht

Erklärt ClassCastExceptions zur Laufzeit, warum new T() fehlt und warum Reflection/Serialisierung Generics verliert. Raw Types in Altcode sind Migrationsschuld, keine moderne API-Form.

Vertiefung

Java übersetzt die meisten generischen Typinformationen in Prüfungen und Umwandlungen zur Compilezeit. Zur Laufzeit besitzen verschiedene Typargument-Ausprägungen meist dieselbe Klassenrepräsentation. Diese Übersetzung heisst Typlöschung.

Brückenmethoden erhalten Polymorphie, wenn spezialisierte Methodensignaturen nach der Übersetzung nicht mehr direkt übereinstimmen. Laufzeitinformationen über verschachtelte Typargumente sind nur eingeschränkt über Reflection verfügbar.

Ein Raw Type umgeht einen Teil der statischen Prüfung zur Kompatibilität mit älterem Code. Der unsichere Schreibzugriff und der spätere Cast können weit auseinanderliegen, wodurch Fehler an einer irreführenden Stelle auftreten.

Schwierigkeitsstufen

  1. Compilezeit- und Laufzeittypinformation unterscheiden.
  2. Den Zweck synthetischer Brückenmethoden erklären.
  3. Eine Raw-Type-Warnung bis zum späteren Fehler verfolgen.

Fallstricke

instanceof List<String> ist wegen fehlender vollständiger Laufzeitinformation nicht zulässig. Unterdrückte Warnungen sind kein Beweis für Typsicherheit.


Sources

University approvals: 0
Tasks
Question 1

Warum schlägt new T() für einen Typparameter T fehl?

Question 2

Warum kann ein Raw Type einen Fehler weit vom unsicheren Schreiben entfernt auslösen?

Question 3

Implementiere eine generische Pair-Klasse mit zwei Zugriffsmethoden.

Hint

Die Typparameter A und B können direkt als Rückgabetypen dienen. Greife in Instanzmethoden mit this.first und this.second zu.

Starter code is prefilled; replace TODO blocks with your solution.
1 test case will be used for grading
Run checks runtime behavior only. Final correctness is evaluated when you submit.
Card Info
  • Topic: Algorithmen und Datenstrukturen
  • Difficulty: Intermediate
  • Completed: 0 users
Creator
Best
Best
BestBuddy