Jaký je význam varování bezpečnostního typu v určitých generik Java obsadí?

hlasů
61

Jaký je význam tohoto varování Java ?

Bezpečnost typ: Odlitek z objektu do seznamu je ve skutečnosti kontrolu proti vymazány seznamu typu

Mám toto varování, když se snažím odevzdat objekt na typu s generické informace, jako v následující kód:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
Položena 02/08/2008 v 09:58
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
50

Toto varování je tu proto, že Java není ve skutečnosti ukládání informací o typu v době spuštění v objektu, který používá generik. Proto, pokud objectje ve skutečnosti List<String>, to nebude mít žádný ClassCastExceptionza běhu s výjimkou, dokud je položka přístupná ze seznamu, který neodpovídá obecný typ definované v proměnné.

To může způsobit další komplikace, pokud jsou položky přidány do seznamu, s tímto nesprávné informace generického typu. Jakýkoliv kód stále drží odkaz na seznamu, ale s správné informace uvedeného druhu nyní budou mít nekonzistentní seznam.

Chcete-li odstranit varování, vyzkoušejte následující postup:

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

Uvědomte si však, že nebudete moci používat některé metody, jako doplněk, protože překladač neví, jestli se snažíte přidat objekt nesprávný typ. Výše uvedené bude pracovat v mnoha situacích, ale pokud budete muset použít přidat, nebo nějaký podobně omezeného způsob, budete muset trpět žluté podtržení v Eclipse (nebo SuppressWarningpoznámky).

Odpovězeno 02/08/2008 v 09:58
zdroj uživatelem

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