Thomas J.S.: Warnungen bei Vector<MyType> vs. Vector

Beitrag lesen

Hallo,

Das Problem ist, dass ein Kompiler davon herzlich wenig weiss und so muss er quasi jammern.
Ja, beim Methoden-Rückgabewert ist das verständlich. Warum aber die Warnung beim expliziten Typecast? Beim Typecast sollte doch der Compiler beim Kompilieren prüfen, ob so ein Cast möglich ist und wenn ja, dann die entspechende Casting-Routine einsetzen, die _sicherstellt_, das der Cast gelingt. Was genau ist also der Sinn der Warnung bei:

Vector<MyFirstType> mftv = (Vector<MyFirstType>) someObject.call(MyFirstType.class);

?

Du meinst damit die Warnung "Type safety: The cast from Vector to Vector<MyFirstType> is actually checking against the erased type Vector"?

Die Methode someObject.call(MyFirstType.class) liefert ein Vector-Object. Nach Generics ein Vector<Object> oder ein Vector<?>. Dieses wird explizit in ein Vector<MyFirstType> gecastet. Die Warnung kann man ja nur so verstehen: Hey, meine Casting-Routine ist so unzulänglich, dass sie nicht sicherstellen kann, dass wirlich ein Vector<MyFirstType> entsteht. Ist das so? Wenn ja, warum ist das so? Außer beim Casing in String-Objects (jedes Objekt hat eine .toString()-representation) müssten solche Warnings dann doch auch bei andern Casts kommen z.B. (AbstractDocument) in.readObject() beim Deserialisieren.

So weit ich das verstehe, gibt es einen Unterschied zwischen der Zeit der Kompilierung, wo generische Typen vollständig vorhanden sind, und der Zeit der Ausführung, wo der Unterschied der generischen Typen nicht mehr gegeben ist.

Eine bessere Erklärung ist vielleicht http://www.velocityreviews.com/forums/showpost.php?p=1924646&postcount=4

Grüße
Thomas