Pergunta

Uma vez que os genéricos são verificadas apenas durante o tempo de compilação com Java 5, eles podem evitar ClassCastExceptions em tudo situações?

Foi útil?

Solução

Em primeiro lugar, você deve se certificar de que seus compila código sem avisos unckeched. Isso é um bom indicador. Para entender o porquê, eu sugiro que você dê uma olhada na capítulo de amostra para os genéricos de Java eficaz .

Em segundo lugar, os genéricos podem não protegê-lo a partir do código, tais como:

public void methodOne(Integer argument)  {
     methodTwo(argument);
} 

public void methodTwo(Object argument) {
     System.out.println(((Date) argument).getTime());
}

Terceiro de tudo, se você está de alguma forma ou de outra mexer com classe Carregadeira, você pode obter ClassCastExceptions estranho, como em esta discussão fio . É de entorpecimento mental para ver

java.lang.ClassCastException: javax.mail.Session não pode ser convertido para javax.mail.Session

Portanto, a resposta é não, você não pode se livrar de ClassCastExceptions apenas usando adequadamente os genéricos .

Outras dicas

A garantia "de ferro fundido" que o Java 5 genéricos fornece é que você nunca vai ver um ClassCastException dos moldes inseridos pelo compilador fornecido que a compilação produzido nenhum aviso "não verificadas".

Na vida real, muitas vezes você não pode evitar avisos desmarcada se o código usa bibliotecas legados (não-generified). Então os moldes gerados pelo compilador pode jogar ClassCastException, e é seu trabalho para evitar isso, garantindo que os valores devolvidos pelo código da biblioteca são bem-digitado para as suas declarações.

Caso contrário, a situação permanece inalterada. Fora dos genéricos, se você converter para um tipo incompatível você vai ter uma ClassCastException da mesma forma como você sempre fez.

(A boa referência para esta e outras questões de genéricos é Java Generics e Coleções .)

No. Usando Java 5.0 e genéricos tipo não faz de você ClassCastException-prova.

Não. genéricos só poupar de erros em tempo de compilação, não exceções de tempo de execução.

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