Domanda

Qual è il significato di Avviso Java?

Tipo di sicurezza:Il cast da Object a List<Integer> sta effettivamente verificando il tipo cancellato List

Ricevo questo avviso quando provo a trasmettere un oggetto a un tipo con informazioni generiche, come nel seguente codice:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
È stato utile?

Soluzione

Questo avviso è presente perché Java non memorizza effettivamente le informazioni sul tipo in fase di esecuzione in un oggetto che utilizza generici.Quindi, se object è in realtà un List<String>, non ci sarà ClassCastException in 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 informazioni di tipo generico errate.Qualsiasi codice che contenga ancora un riferimento all'elenco ma con le informazioni sul 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 tentando di aggiungere un oggetto di tipo errato.Quanto sopra funzionerà in molte situazioni, ma se devi usare add, o qualche metodo similmente limitato, dovrai semplicemente subire la sottolineatura gialla in Eclipse (o un SuppressWarning annotazione).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top