Wenn ich eine Klasse:Warum löscht eine generische Java-RAW-Klasse alle generischen Objekte, wenn keine Typparameter angegeben sind?
public class GenericClass<TBlah extends Number> {
public List<String> getList() {
return null;
}
}
Wenn ich diese Methode von einer anderen Klasse zu verwenden versuchen:
public class OtherClass {
public void test() {
GenericClass a = null;
for (String s : a.getList()) {
}
}
}
Warum ein List<Object>
nicht a.getList()
zurück, bis ich die Zeile oberhalb der for-Schleife zu ändern:
GenericClass<Number> a = null;
An welchem Punkt a.getList() gibt ein List<String>
wie sollte es tun?
Edit: Ich verstehe nicht, warum der Vertrag, der von getList()
angegeben wird, von wie auch immer betroffen sein sollte, wie ich meine Variable 'a' deklariere. getList()
gibt immer eine List<String>
zurück, es ist egal, was TBlah ist.
Uhm, warum initialisiere ich ihn auf "null"? – fge
@fge Einfachheit. Es ist irrelevant für das Problem, denke ich. – Xenoprimate
Denn das ist die Entscheidung der Autoren der JLS. AFAIK, die Argumentation ist, dass wenn Sie rohe Typen verwenden, Sie sich nicht um generische Typen kümmern. Die Lösung besteht darin, die Verwendung von Rohtypen zu vermeiden. –