Frage

Was bedeutet das Java-Warnung?

Typensicherheit:Die Umwandlung von Object in List<Integer> prüft tatsächlich anhand des gelöschten Typs List

Ich erhalte diese Warnung, wenn ich versuche, ein Objekt in einen Typ mit generischen Informationen umzuwandeln, wie im folgenden Code:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
War es hilfreich?

Lösung

Diese Warnung tritt auf, weil Java zur Laufzeit keine Typinformationen in einem Objekt speichert, das Generika verwendet.Also, wenn object ist eigentlich ein List<String>, es wird kein geben ClassCastException zur Laufzeit, außer bis auf ein Element aus der Liste zugegriffen wird, das nicht mit dem in der Variablen definierten generischen Typ übereinstimmt.

Dies kann zu weiteren Komplikationen führen, wenn Elemente mit diesen falschen generischen Typinformationen zur Liste hinzugefügt werden.Jeder Code, der noch einen Verweis auf die Liste, aber mit den korrekten generischen Typinformationen enthält, weist nun eine inkonsistente Liste auf.

Um die Warnung zu entfernen, versuchen Sie Folgendes:

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 wird in vielen Situationen funktionieren, aber wenn Sie add oder eine ähnlich eingeschränkte Methode verwenden müssen, müssen Sie nur die gelbe Unterstreichung in Eclipse (oder einer anderen) ertragen SuppressWarning Anmerkung).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top