Как распространить исключение в Java - PullRequest
10 голосов
/ 29 февраля 2012

Я программист на C и недавно изучил Java, потому что я разрабатываю одно приложение для Android.В настоящее время я нахожусь в ситуации.Ниже приведен один.

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.
   }
   }
}

Теперь я хочу использовать вызов метода MyMethod () где-то еще в другом классе.Если кто-то может предоставить мне фрагмент кода, как распространить исключения на вызывающую функцию MyMethod (), чтобы я мог отобразить их в диалоговом окне в методе вызывающей стороны.

Извините, если мне не так яснои странный способ задать этот вопрос.

Ответы [ 4 ]

23 голосов
/ 29 февраля 2012

Только не перехватывайте исключение и измените объявление метода, чтобы оно могло их распространять:

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

Если вам нужно предпринять какое-то действие и , тогда распространять, вы можете отбросить его:

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

Здесь ExceptionType2 вообще не пойман - он просто распространится вверх автоматически.ExceptionType1 перехватывается, регистрируется и затем перебрасывается.

Это не хорошая идея иметь блоки catch, которые просто перебрасывают исключение - если нет какой-либо тонкой причины(например, чтобы предотвратить обработку более общего блока catch), вы должны просто удалить вместо него блок catch.

2 голосов
/ 29 февраля 2012

Не лови его и не перебрасывай снова. Просто сделай это и поймай в нужном месте

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

Пример

public void someMethod() {
    try {
        myMethod();
    } catch (ExceptionType1 ex) {
        // show your dialog
    } catch (ExceptionType2 ex) {
        // show your dialog
    }
}
0 голосов
/ 12 мая 2013

Я всегда так делаю:

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

тогда при вызове функции

try{
    MyMethod();
   }catch(Exception e){
    System.out.println(e.getMessage());
}
0 голосов
/ 29 февраля 2012

Просто перебросьте исключение

throw Excp1;

Вам нужно будет добавить тип исключения к объявлению MyMthod(), как это

public void MyMethod() throws ExceptionType1, ExceptionType2  {

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

Или просто пропуститьtry вообще, так как вы больше не обрабатываете исключения, если только вы не добавили некоторый дополнительный код в операторы catch, выполняющие какие-то действия с исключением, прежде чем выбросить его.

...