Wat is de betekenis van het type veiligheidswaarschuwing in bepaalde Java generics werpt?

stemmen
61

Wat is de betekenis van de Java waarschuwing ?

Type de veiligheid: De cast van object naar de lijst is eigenlijk het controleren tegen de gewiste Lijsttype

Ik krijg deze waarschuwing wanneer ik probeer om een ​​object te casten naar een type met algemene informatie, zoals in de volgende code:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
De vraag is gesteld op 02/08/2008 om 09:58
bron van user
In andere talen...                            


1 antwoorden

stemmen
50

Deze waarschuwing is er omdat Java niet daadwerkelijk opslaan van type-informatie tijdens de uitvoering van een object dat generieke gebruikt. Dus als objectis eigenlijk een List<String>, zal er geen zijn ClassCastExceptionin run-time, behalve totdat een item wordt geopend in de lijst die niet overeenkomt met de algemene soort gedefinieerd in de variabele.

Dit kan verder leiden tot complicaties als items worden toegevoegd aan de lijst, met dit onjuiste algemene soort informatie. Elke code nog steeds met een verwijzing naar de lijst, maar met de juiste algemene soort informatie zal nu een inconsistente lijst.

Om de waarschuwing te verwijderen, probeer:

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

Merk echter op dat u niet in staat zijn om bepaalde methoden te gebruiken zal zijn, zoals toe te voegen, omdat de compiler niet weet of je probeert om een object van onjuist type toe te voegen. De bovenstaande zal werken in veel situaties, maar als je moet gebruiken toe te voegen, of een soortgelijke besloten methode, zal je hoeft alleen de gele onderstreping in Eclipse (of lijden SuppressWarningannotatie).

antwoordde op 02/08/2008 om 09:58
bron van user

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