Salve a tutti.
Oggi leggendo la guida a jsp mi sono imbattuto in una parte di codice che non riesco a capire a livello logico.
La pagina di riferimento è la seguente: link
nella classe jrun__prova2ejspa è presente un try-catch che esegue un controllo e a un successivo cast sul tipo di classe catturata, ovvero:
codice:
try {
out.print("<!-- PROVA.JSP-->rnrn<html>rnrn<body>rnrn");
out.println ("PRIMA PROVA JSP");
out.print("rnrn</body>rnrn</html>");
} catch(Throwable t) {
if(t instanceof ServletException) throw (ServletException) t;
if(t instanceof java.io.IOException) throw (java.io.IOException) t;
if(t instanceof RuntimeException) throw (RuntimeException) t;
throw JRunJSPStaticHelpers.handleException(t, pageContext);
} finally {
__jspFactory.releasePageContext(pageContext);
}
il segmento di codice che mi lascia perplesso è il seguente:
codice:
if(t instanceof ServletException) throw (ServletException) t;
if(t instanceof java.io.IOException) throw (java.io.IOException) t;
if(t instanceof RuntimeException) throw (RuntimeException) t;
la domanda è: perche' dopo che ho verificato che t sia una istanza di tipo T, la rilancio facendo un cast?
da quello che so (quindi molto probabilmente sbaglio) l'istanza puntata dall'handler t si porta sempre dietro il suo tipo, proprio perche' java è un linguaggio a binding dinamico... pertanto mi sembra inutile il cast.
Sbaglio?? se si, perche'? non avrebbe piu' senso una catch scritta in questo modo:
codice:
try {
out.print("<!-- PROVA.JSP-->rnrn<html>rnrn<body>rnrn");
out.println ("PRIMA PROVA JSP");
out.print("rnrn</body>rnrn</html>");
} catch(Throwable t) {
if( t instanceof ServletException ||
t instanceof java.io.IOException ||
t instanceof RuntimeException) {
throw t; // t rimane sempre e comunque una classe di tipo Throwable, quindi rilanciabile
} else {
throw JRunJSPStaticHelpers.handleException(t, pageContext);
}
} finally {
__jspFactory.releasePageContext(pageContext);
}
con tutto lo spaghetti code che rimuoverei.. ma vabo' quello è un altro complesso che non c'entra con l'argomento del topic....
spero che qualcuno mi possa rispondere a questo dubbio esistenziale =D
Grazie in anticipo ^^
edit:
maledizione non ho visto il subforum java =( chiedo scusa..
Un moderatore puo' spostarmi la discussione perfavore? chiedo ancora scusa =(