Wat is die betekenis van die tipe veiligheidswaarskuwing in sekere Java generiese casts?
-
08-06-2019 - |
Vra
Wat is die betekenis van die Java waarskuwing?
Tipe veiligheid:Die rolverdeling van Voorwerp na Lys<Geheelgetal> kontroleer eintlik teen die uitgevee tipe Lys
Ek kry hierdie waarskuwing wanneer ek probeer om 'n voorwerp na 'n tipe te gooi met generiese inligting, soos in die volgende kode:
Object object = getMyList();
List<Integer> list = (List<Integer>) object;
Oplossing
Hierdie waarskuwing is daar omdat Java nie eintlik tipe inligting tydens looptyd stoor in 'n voorwerp wat generiese gebruike gebruik nie.Dus, as object
is eintlik a List<String>
, daar sal geen ClassCastException
tydens looptyd behalwe totdat toegang verkry word tot 'n item vanaf die lys wat nie ooreenstem met die generiese tipe wat in die veranderlike gedefinieer is nie.
Dit kan verdere komplikasies veroorsaak as items by die lys gevoeg word, met hierdie verkeerde generiese tipe inligting.Enige kode wat steeds 'n verwysing na die lys bevat, maar met die korrekte generiese tipe inligting sal nou 'n inkonsekwente lys hê.
Om die waarskuwing te verwyder, probeer:
List<?> list = (List<?>) object;
Let egter daarop dat jy nie sekere metodes soos voeg sal kan gebruik nie, want die samesteller weet nie of jy probeer om 'n objek van verkeerde tipe by te voeg nie.Bogenoemde sal in baie situasies werk, maar as jy add, of een of ander soortgelyke beperkte metode moet gebruik, sal jy net die geel onderstreep in Eclipse (of 'n SuppressWarning
annotasie).