Qual é o significado do aviso de segurança existentes em alguns genéricos Java lança?

votos
61

Qual é o significado do aviso Java ?

Tipo de segurança: O elenco do objeto a lista é realmente a consulta da lista Tipo Erased

Eu recebo este aviso quando tento converter um objeto para um tipo com informações genéricas, como no seguinte código:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
Publicado 02/08/2008 em 09:58
fonte usuário
Em outras línguas...                            


1 respostas

votos
50

Este aviso está lá porque Java não está realmente armazenar informações de tipo em tempo de execução em um objeto que usa os genéricos. Assim, se objecté na verdade um List<String>, não haverá ClassCastExceptionem tempo de execução, exceto até que um item é acessado a partir da lista que não coincide com o tipo genérico definido na variável.

Isto pode causar mais complicações se os itens são adicionados à lista, com esta informação de tipo genérico incorreto. Qualquer código ainda segurando uma referência para a lista, mas com as informações corretas tipo genérico terá agora uma lista inconsistente.

Para remover o aviso, tente:

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

No entanto, note que você não será capaz de usar certos métodos tais como adicionar porque o compilador não sabe se você está tentando adicionar um objeto do tipo incorreto. O acima irá trabalhar em uma série de situações, mas se você tem que usar adicionar ou algum método semelhante restrito, você só terá que sofrer o sublinhado amarelo no Eclipse (ou uma SuppressWarninganotação).

Respondeu 02/08/2008 em 09:58
fonte usuário

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