Mitä tietoturvavaroituksella tarkoitetaan tietyissä Java-geneerisissä vaateissa?

Translate

Mikä onJava-varoitus?

Tyyppiturvallisuus: Lähetys objektista luetteloon <Integer> tarkistaa itse asiassa poistettua tyyppiluetteloa

Saan tämän varoituksen, kun yritän heittää objektin tyypille, joka sisältää yleisiä tietoja, kuten seuraavassa koodissa:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
This question and all comments follow the "Attribution Required."

Kaikki vastaukset

Translate

Tämä varoitus on olemassa, koska Java ei todellakaan tallenna tyyppitietoja ajon aikana objektiin, joka käyttää geneerisiä aineita. Joten josobjecton oikeastaan aList<String>, ei tuleClassCastExceptionajon aikana paitsi kunnes alkion käyttö luettelosta ei ole sama kuin muuttujassa määritelty yleinen tyyppi.

Tämä voi aiheuttaa lisäongelmia, jos kohteita lisätään luetteloon näiden virheellisten yleisten tyyppitietojen avulla. Koodilla, jolla on edelleen viittaus luetteloon, mutta jolla on oikeat yleiset tyyppitiedot, on nyt epäjohdonmukainen luettelo.

Poista varoitus yrittämällä:

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

Huomaa kuitenkin, että et voi käyttää tiettyjä menetelmiä, kuten lisätä, koska kääntäjä ei tiedä, yritätkö lisätä väärän tyyppisen objektin. Edellä mainittu toimii monissa tilanteissa, mutta jos joudut käyttämään add-menetelmää tai jotakin vastaavasti rajoitettua menetelmää, joudut vain kärsimään keltaista alleviivaa Eclipse-ohjelmassa (taiSuppressWarningmerkintä).

Lähde
Leave a Reply
You must be logged in to post a answer.