Generischer Typ für Element des Basistyps verloren
Ich habe bei der Arbeit mit Generika ein merkwürdiges Verhalten festgestellt.
In dieser KlasseFoo<T>
, dasstrings
Mitglied hat nichts damit zu tunT
:
package test;
import java.util.ArrayList;
public class Foo<T> {
ArrayList<String> strings;
T getSome() {
return null;
}
}
Die Klasse wird in main verwendet:
package test;
public class Main {
public static void main() {
Foo<Integer> intFoo = new Foo<>();
Integer i = intFoo.getSome();
String s1 = intFoo.strings.get(0);
Foo rawFoo = new Foo();
Object o = rawFoo.getSome();
String s2 = rawFoo.strings.get(0); // Compilation error on this line
}
}
Der Kompilierungsfehler lautet "Inkompatible Typen. Erforderlich: Zeichenfolge gefunden: Objekt".
Es scheint, dass Java das vergisstString
Typ Argument zuArrayList
wenn rohe Art vonFoo
wird eingesetzt.
Meine Java-Version ist 1.7.0_21