Generischer Typ verloren für Element des Rohtyps

9

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:

%Vor%

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

    
Niklas 08.10.2013, 13:10
quelle

1 Antwort

10

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.

    
arshajii 08.10.2013, 13:34
quelle

Tags und Links