Hva er meningen med sikkerhetsvarseltypen i kaster visse Java generiske legemidler?

stemmer
63

Hva er meningen med Java advarsel ?

Type sikkerhet: Skuespillerne fra objekt til List faktisk kontroll mot de slettede typen List

Jeg får denne advarselen når jeg prøver å kaste et objekt til en type med generisk informasjon, som i det følgende kode:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
Publisert på 02/08/2008 klokken 08:58
kilden bruker
På andre språk...                            


1 svar

stemmer
51

Denne advarselen er der fordi Java ikke er faktisk lagrer typen informasjon ved kjøring i et objekt som bruker generiske legemidler. Dermed, hvis objecter faktisk en List<String>, vil det ikke være ClassCastExceptionved kjøring unntatt inntil en vare er tilgjengelig fra listen som ikke samsvarer med den generiske typen definert i variabelen.

Dette kan føre til ytterligere komplikasjoner hvis elementer er lagt til i listen, med denne feil generisk type informasjon. Enhver kode fortsatt holder en referanse til listen, men med riktig generisk type informasjon vil nå ha en inkonsekvent listen.

For å fjerne advarselen, prøve:

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

Vær imidlertid oppmerksom på at du ikke vil være i stand til å bruke visse metoder som legger til grunn at kompilatoren ikke vet om du prøver å legge til et objekt av feil type. Ovennevnte vil fungere i mange situasjoner, men hvis du må bruke til, eller en tilsvarende begrenset metoden, vil du bare nødt til å lide den gule understreking i Eclipse (eller en SuppressWarningmerknad).

Svarte 02/08/2008 kl. 08:58
kilden bruker

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