Qual é o significado do aviso de segurança de tipo em determinadas transmissões de genéricos Java?

Translate

Qual é o significado doAviso de Java?

Segurança de tipo: O elenco de Object to List <Integer> está, na verdade, comparando com 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;
This question and all comments follow the "Attribution Required."

Todas as respostas

Translate

Este aviso existe porque o Java não está realmente armazenando informações de tipo em tempo de execução em um objeto que usa genéricos. Portanto, seobjecté na verdade umList<String>, não haveráClassCastExceptionem 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.

Isso pode causar mais complicações se os 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, agora terá uma lista inconsistente.

Para remover o aviso, tente:

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

No entanto, 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 acima irá funcionar em muitas situações, mas se você tiver que usar add, ou algum método restrito semelhante, você só terá que sofrer o sublinhado amarelo no Eclipse (ou umSuppressWarninganotação).

Fonte