ClassCastException
Opis
ClassCastException jest wyjątkiem z grupy wyjątków niekontrolowanych (dziedziczących po RuntimeException), więc nie ma konieczności jego obsługi. Możemy się z nim spotkać w sytuacji, gdy próbujemy dokonać rzutowania obiektu na niezgodny z nim typ. Najczęściej będzie to spowodowane błędnym wykorzystaniem polimorfizmu.
Wyjątek znajduje się w pakiecie java.lang i dzięki temu nie ma konieczności dodawania dodatkowych importów, pełna ścieżka do klasy to java.lang.ClassCastException.
Przykład
ClassCastExample.java
package pl.javastart.exception.classcastexception;
public class ClassCastExample {
public static void main(String[] args) {
Number[] numbers = {1, 2.5, 4, 7.6};
double sum = 0;
for (Number number : numbers) {
sum += (Integer)number;
}
System.out.println(sum);
}
}
W programie tworzymy tablicę kliku liczb różnego typu - Integer oraz Double, a następnie chcemy je zsumować.
Przez nieuwagę w pętli zamiast rzutować na typ Double rzutujemy na Integer. Oczywiście już przy drugiej iteracji występuje wyjątek, ponieważ nie da się zrzutować wartości 2.5 na typ całkowitoliczbowy. Ostatecznie w konsoli zobaczymy komunikat z wyjątkiem.
Jeżeli natrafimy na wyjątek ClassCastException to raczej zamiast próbować go obsługiwać powinniśmy się zastanowić, czy naszego kodu nie da się zapisać w inny, odpory na błędy sposób.
Dyskusja i komentarze
Masz pytania do tego wpisu? Może chcesz się podzielić spostrzeżeniami? Zapraszamy dyskusji na naszej grupie na Facebooku.