Was ist die Bedeutung des Typs Sicherheitswarnung in bestimmten Java Generika wirft?

stimmen
61

Was ist die Bedeutung der Warnung Java ?

Typsicherheit: Die Besetzung von Objektliste ist die Überprüfung tatsächlich gegen die gelöschter Typen Liste

Ich erhalte diese Warnung, wenn ich versuche, ein Objekt auf einen Typen mit allgemeinen Informationen, wie im folgenden Code zu werfen:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
Veröffentlicht am 02/08/2008 um 09:58
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
50

Diese Warnung ist da , weil Java ist eigentlich nicht Typinformationen zur Laufzeit in einem Objekt zu speichern , die Generika verwendet. Wenn also objecttatsächlich eine ist List<String>, wird es keine sein , ClassCastExceptionaußer während der Laufzeit , bis ein Element aus der Liste zugegriffen wird , die nicht den generischen Typen in der Variable definiert entspricht.

Dies kann zu weiteren Komplikationen führen, wenn Elemente in die Liste aufgenommen werden, mit diesen falschen gattungsgemäße Informationen. Jeder Code noch einen Verweis auf die Liste hält aber mit den richtigen generischen Typinformationen hat nun eine inkonsistente Liste.

Um die Warnung zu entfernen, versuchen:

List<?> list = (List<?>) object;

Beachten Sie jedoch, dass Sie bestimmte Methoden nicht in der Lage sein wird , zu verwenden , wie hinzugefügt werden, da der Compiler nicht weiß , wenn Sie ein Objekt von falschen Typ hinzufügen möchten. Die oben wird in vielen Situationen arbeiten, aber wenn Sie verwenden müssen hinzufügen oder einige ähnlich beschränkt Methode, werden Sie nur die gelbe unterstrichen in Eclipse zu leiden haben (oder eine SuppressWarningAnmerkung).

Beantwortet am 02/08/2008 um 09:58
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more