Pergunta

Qual é o significado do Aviso Java?

Digite segurança:A conversão de Object para List<Integer> está na verdade verificando o tipo apagado List

Recebo este aviso quando tento converter um Object para um tipo com informações genéricas, como no código a seguir:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
Foi útil?

Solução

Este aviso existe porque Java não está realmente armazenando informações de tipo em tempo de execução em um objeto que usa genéricos.Assim, se object é na verdade um List<String>, não haverá ClassCastException em tempo de execução, exceto até que um item seja acessado da lista que não corresponda ao tipo genérico definido na variável.

Isto pode causar complicações adicionais se itens forem adicionados à lista, com essas informações de tipo genérico incorretas.Qualquer código que ainda contenha uma referência à lista, mas com as informações de tipo genérico corretas, terá agora uma lista inconsistente.

Para remover o aviso, tente:

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

Entretanto, observe que você não poderá usar certos métodos como add porque o compilador não sabe se você está tentando adicionar um objeto de tipo incorreto.O procedimento acima funcionará em muitas situações, mas se você tiver que usar add, ou algum método restrito semelhante, você apenas terá que sofrer o sublinhado amarelo no Eclipse (ou um SuppressWarning anotação).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top