Welche Bedeutung hat die Typensicherheitswarnung in bestimmten Java-Generika-Casts?

Translate

Was ist die Bedeutung derJava-Warnung?

Typensicherheit: Die Umwandlung von Objekt in Liste <Integer> wird tatsächlich mit der gelöschten Typliste verglichen

Ich erhalte diese Warnung, wenn ich versuche, ein Objekt in einen Typ mit allgemeinen Informationen umzuwandeln, z. B. im folgenden Code:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Diese Warnung ist vorhanden, da Java zur Laufzeit keine Typinformationen in einem Objekt speichert, das Generika verwendet. Also wennobjectist eigentlich einList<String>, es wird kein gebenClassCastExceptionzur Laufzeit, außer bis auf ein Element aus der Liste zugegriffen wird, das nicht dem in der Variablen definierten generischen Typ entspricht.

Dies kann weitere Komplikationen verursachen, wenn Elemente mit diesen falschen generischen Typinformationen zur Liste hinzugefügt werden. Jeder Code, der noch einen Verweis auf die Liste enthält, aber die richtigen generischen Typinformationen enthält, hat jetzt eine inkonsistente Liste.

Versuchen Sie Folgendes, um die Warnung zu entfernen:

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

Beachten Sie jedoch, dass Sie bestimmte Methoden wie add nicht verwenden können, da der Compiler nicht weiß, ob Sie versuchen, ein Objekt vom falschen Typ hinzuzufügen. Das Obige funktioniert in vielen Situationen, aber wenn Sie add oder eine ähnlich eingeschränkte Methode verwenden müssen, müssen Sie nur die gelbe Unterstreichung in Eclipse (oder a) erleidenSuppressWarningAnmerkung).

Quelle
Leave a Reply
You must be logged in to post a answer.