Ich habe ein seltsames Verhalten bei der Arbeit mit Generika gefunden.
In dieser Klasse Foo<T>
hat das strings
-Member nichts mit T
zu tun:
Die Klasse wird in main verwendet:
%Vor%Der Kompilierungsfehler ist "inkompatible Typen. Erforderlich: String found: Object".
Es scheint, dass Java das Argument String
type an ArrayList
vergisst, wenn der rohe Typ von Foo
verwendet wird.
Meine Java Version ist 1.7.0_21
Einfach gesagt, weil rawFoo
roh ist, werden seine nicht-statischen Elemente auch roh.
Dies ist in JLS §4.8 beschrieben :
Genauer gesagt ist ein roher Typ definiert als einer von:
Der Referenztyp, der gebildet wird, indem der Name einer generischen Typdeklaration ohne zugehörige Argumentliste übernommen wird.
Ein Array-Typ, dessen Elementtyp ein unformatierter Typ ist.
Ein nicht-statischer Elementtyp eines Rohtyps R, der nicht von einer Superklasse oder Superschnittstelle von R geerbt wurde.
Beachten Sie die letzte Kugel.