Witam. Czy, może ktoś solidnie, z przykładem powiedzieć i udowodnić dlaczego rzucanie ogólnego wyjątku Exception w Javie jest złe i nie powinno się tego robić? Napisałem taki prosty kawałek kodu:
public class Point {
public void m(int x) throws Exception{
if(x == 1) throw new IllegalAccessException();
else if (x == 2) throw new InstantiationException();
else if (x == 3) throw new CloneNotSupportedException();
else throw new NoSuchFieldException();
}
public static void main(String[] args){
Point p1 = new Point();
try{
p1.m(1);
}
catch(IllegalAccessException e){
System.err.println(e);
System.err.println("ILLEGAL ACCESS");
}
catch(InstantiationException e){
System.err.println(e);
System.err.println("INSTANTIATION");
}
catch(CloneNotSupportedException e){
System.err.println(e);
System.err.println("CLONE");
}
catch(Exception e){
System.err.println(e);
System.err.println("EXCEPTION");
}
}
}
Przerzuciłem kiladziesiąt stron w poszukiwaniu odpowiedzi i być może jej nie rozumiem. Ludzie piszą na stacku, żę jeżeli metoda rzuca ogólny wyjątek, to niby nie jestem w stanie potem odróżnić jaki to był konkretny wyjątek, bo pakuje wszystko do ogólnego typu Exception. Jednak w kodzie który widać powyżej, jestem w stanie obsłużyć wszystkie 3 moje wyjątki (w zależności jaki sobie podam parametr do metody m() ), pozostałe zwyczaje będą obsługiwane przez ostatnią klauzulę catch(Exception e). Gdzie jest więc problem?