У меня есть класс ниже с одним методом, который выдает проверенное исключение.

public class Sample{

 public String getName() throws CustomException{

  //Some code
   //this method contacts some third party library and that can throw RunTimeExceptions

}

}

CustomException.java

public class CustomException Extends Exception{
 //Some code


}

Теперь в другом классе мне нужно вызвать метод и обработать исключения.

public String getResult() throws Exception{
  try{
  String result = sample.getName();
   //some code
  }catch(){
     //here i need to handle exceptions
   }
  return result;
}

Мое требование:

sample.getName() может вызывать CustomException, а также RunTimeExceptions.

В блоке catch мне нужно перехватить исключение. Если перехваченное исключение - RunTimeException, то мне нужно проверить, является ли RunTimeException экземпляром SomeOtherRunTimeException. Если это так, я должен вместо этого выбросить null .

Если RunTimeException не является экземпляром SomeOtherRunTimeException, мне просто нужно повторно вызвать то же исключение времени выполнения.

Если перехваченное исключение - это CustomException или любое другое проверенное исключение, то мне нужно повторно сгенерировать то же самое. Как я могу это сделать?

0
user755806 19 Дек 2013 в 14:11

2 ответа

Лучший ответ

Сделать можно так:

catch(RuntimeException r)
{
     if(r instanceof SomeRunTimeException)
       throw null; 
       else throw r;
}
catch(Exception e) 
{
     throw e;
}

Примечание: Exception перехватывает все исключения. Поэтому он расположен внизу.

1
Aman Arora 19 Дек 2013 в 10:29

Вы можете просто сделать:

public String getResult() throws Exception {
    String result = sample.getName(); // move this out of the try catch
    try {
        // some code
    } catch (SomeOtherRunTimeException e) {
        return null;
    }
    return result;
}

Все остальные отмеченные и непроверенные исключения будут распространяться. Нет необходимости ловить и перебрасывать.

1
Pieter 19 Дек 2013 в 10:21