Visualizzazione dei risultati da 1 a 4 su 4

Visualizzazione discussione

  1. #1
    Utente di HTML.it L'avatar di Ifrit
    Registrato dal
    Oct 2005
    Messaggi
    116

    [Java] Cast dopo una instanceof

    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 =(
    Ultima modifica di Ifrit; 02-05-2015 a 18:31
    codice:
     $(".canaglia").show()

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.