Qual è il significato dell'avviso di sicurezza del tipo in alcuni cast generici Java?

Translate

Qual è il significato diAvviso Java?

Sicurezza dei tipi: il cast da Object a List <Integer> sta effettivamente verificando il tipo cancellato List

Ricevo questo avviso quando provo a eseguire il cast di un oggetto su un tipo con informazioni generiche, come nel codice seguente:

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

Tutte le risposte

Translate

Questo avviso è presente perché Java non memorizza effettivamente le informazioni sul tipo in fase di esecuzione in un oggetto che utilizza generics. Quindi, seobjectè in realtà un fileList<String>, non ci saràClassCastExceptionin fase di esecuzione tranne fino a quando non si accede a un elemento dall'elenco che non corrisponde al tipo generico definito nella variabile.

Ciò può causare ulteriori complicazioni se gli elementi vengono aggiunti all'elenco, con queste informazioni di tipo generico errate. Qualsiasi codice che contiene ancora un riferimento all'elenco ma con le informazioni di tipo generico corrette ora avrà un elenco incoerente.

Per rimuovere l'avviso, prova:

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

Tuttavia, tieni presente che non sarai in grado di utilizzare alcuni metodi come add perché il compilatore non sa se stai cercando di aggiungere un oggetto di tipo errato. Quanto sopra funzionerà in molte situazioni, ma se devi usare add, o un metodo similmente limitato, dovrai solo subire la sottolineatura gialla in Eclipse (o unSuppressWarningannotazione).

fonte