Não genéricos em Java evitar todos ClassCastExceptins?
-
16-09-2019 - |
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?
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 ClassCastException
s 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.