Cast pra hashtable (usando generics)

4 respostas
V

Eu tenho uma hashtable salva em um arquivo e quero recriar ela em memória, fazendo mais ou menos isso:

obj = objIn.readObject();
 
if (obj instanceof Hashtable)
{
    myHashtable = (Hashtable<K, V>) obj;
}

O código acima compila, mas aparece um warning dizendo que o código faz uma operação unchecked / unsafe. Compilando com -Xlint, aparece uma mensagem dizendo que o "obj" na linha do cast deveria ser uma Hashtable, mas é somente um Hashtable.

Eu comecei com Java há pouco tempo e queria saber se tem como fazer esse cast sem gerar nenhum warning.

Obrigado.

4 Respostas

Edufa

Como vc declarou myHashtable?

Hashtable myHashtable = new Hashtable();

ou

Hashtable<K,V>  myHashtable = new Hashtable<K,V>();
V

Da segunda maneira.

Mauricio_Linhares

Não é possível fazer um cast de um objeto não genérico para um objeto genérico sem gerar warnings.

Sami_Koivu

Olá,

Pelo que eu sei, não há como mudar o código para evitar o warning nesse caso. Para livrar se do warning, utilize a annotation:
@SuppressWarnings(“unchecked”)
ou a opção do compilador:
-Xlint:-unchecked

Eu normalmente anoto a variável local com essa @SuppressWarnings(“unchecked”)

Caso isso não for possível eu anoto o método que faz essa leitura de objetos serializados.

Mais sobre o assunto:

http://forum.java.sun.com/thread.jspa?threadID=5118644&messageID=9410874

http://www.angelikalanger.com/GenericsFAQ/FAQSections/TechnicalDetails.html#Compiler%20Messages

[]s,
Sami

Criado 3 de fevereiro de 2007
Ultima resposta 3 de fev. de 2007
Respostas 4
Participantes 4