Mit jelent az a típus biztonsági figyelmeztetés bizonyos Java generikumok vet?

szavazat
61

Mi az értelme a Java figyelmeztetés ?

Típus biztonság: Az öntött Object kattintva valójában összevetéséből kitörölt típus lista

Azt, hogy ezt a figyelmeztetést, amikor megpróbálom leadott egy objektum típusú generikus információkat, mint például az alábbi kódot:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
A kérdést 02/08/2008 09:58
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
50

Ez a figyelmeztetés van, mert a Java valójában nem tárolja típusú információ futási időben egy tárgy, amely a generikumok. Így, ha objectvalójában egy List<String>, nem lesz ClassCastExceptionfutási időben, kivéve, amíg egy elem elérésekor a listáról, amely nem felel meg a generikus típusú változóban meghatározott.

Ez okozhatja a további szövődmények ha tételek bekerülnek a listába, ezzel helytelen általános információt. Bármely kód még mindig kezében egy hivatkozást a listán, de a megfelelő általános típusú információt most egy ellentmondásos listát.

Ahhoz, hogy távolítsa el a figyelmeztetést, próbálja:

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

Fontos megjegyezni ugyanakkor, hogy nem fogja tudni használni bizonyos módszerek, mint például hozzá, mert a fordító nem tudja, ha megpróbálja felvenni egy tárgyat a nem megfelelő típusú. A fenti fog működni egy csomó helyzetben, de ha meg kell használni hozzá, vagy valami hasonlóan zárt módszer, akkor csak meg kell szenvedni a sárga aláhúzás az Eclipse (vagy a SuppressWarningkommentár).

Válaszolt 02/08/2008 09:58
a forrás felhasználó

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