2012-02-29 15 views
6

Soy un programador de C y acabo de aprender algo de Java recientemente porque estoy desarrollando una aplicación de Android. Actualmente estoy en una situación. El siguiente es el uno.Cómo propagar una excepción en java

public Class ClassA{ 

public ClassA(); 

public void MyMethod(){ 

    try{ 
    //Some code here which can throw exceptions 
    } 
    catch(ExceptionType1 Excp1){ 
    //Here I want to show one alert Dialog box for the exception occured for the user. 
    //but I am not able to show dialog in this context. So I want to propagate it 
    //to the caller of this method. 
    } 
    catch(ExceptionType2 Excp2){ 
    //Here I want to show one alert Dialog box for the exception occured for the user. 
    //but I am not able to show dialog in this context. So I want to propagate it 
    //to the caller of this method. 
    } 
    } 
} 

Ahora quiero utilizar el método MyMethod() en otro lugar en otra clase. Si alguien puede proporcionarme algún fragmento de código, cómo propagar las excepciones a la persona que llama de MyMethod() para que pueda mostrarlas en un cuadro de diálogo en el método de la persona que llama.

Lo siento si no soy tan claro y extraño en la forma de hacer esta pregunta.

+1

Véase también http://stackoverflow.com/questions/409563/best-prac tices-for-exception-management-in-java-or-c-sharp – mglauche

Respuesta

20

Eso sí, no detectar la excepción, en primer lugar, y cambiar su declaración de método para que pueda propagarlas:

public void myMethod() throws ExceptionType1, ExceptionType2 { 
    // Some code here which can throw exceptions 
} 

Si tiene que tomar alguna acción y luego se propagan, se puede volver a lanzar que:

public void myMethod() throws ExceptionType1, ExceptionType2 { 
    try { 
     // Some code here which can throw exceptions 
    } catch (ExceptionType1 e) { 
     log(e); 
     throw e; 
    } 
} 

Aquí ExceptionType2 no estaba en absoluto - sólo va a propagar de forma automática. ExceptionType1 es atrapado, registrado y luego rediseñado.

Es no una buena idea tener bloques catch, que simplemente volver a lanzar una excepción - a menos que haya alguna razón sutil (por ejemplo, para evitar que un bloque catch más general de la manipulación de ella) debe normalmente basta con retirar el bloque catch vez .

0

Sólo volver a lanzar la excepción

throw Excp1;

Usted tendrá que añadir el tipo de excepción a la declaración MyMthod() como esto

public void MyMethod() throws ExceptionType1, ExceptionType2 { 

    try{ 
    //Some code here which can throw exceptions 
    } 
    catch(ExceptionType1 Excp1){ 
     throw Excp1; 
    } 
    catch(ExceptionType2 Excp2){ 
     throw Excp2; 
    } 
} 

O simplemente omitir el try en absoluto, ya que ya no están manejando las excepciones, a menos que coloque algún código adicional en las declaraciones de captura haciendo cosas con la excepción antes de volver a lanzarlo.

2

No lo atrape y vuelva a lanzar de nuevo. Sólo hacer esto y atraparlo en el lugar que desee

public void myMethod() throws ExceptionType1, ExceptionType2 { 
    // other code 
} 

Ejemplo

public void someMethod() { 
    try { 
     myMethod(); 
    } catch (ExceptionType1 ex) { 
     // show your dialog 
    } catch (ExceptionType2 ex) { 
     // show your dialog 
    } 
} 
0

Siempre lo hago así:

public void MyMethod() throws Exception 
{ 
    //code here 
    if(something is wrong) 
     throw new Exception("Something wrong"); 
} 

entonces cuando se llama a la función

try{ 
    MyMethod(); 
    }catch(Exception e){ 
    System.out.println(e.getMessage()); 
} 
Cuestiones relacionadas