У меня есть класс ниже с одним методом, который выдает проверенное исключение.
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
или любое другое проверенное исключение, то мне нужно повторно сгенерировать то же самое. Как я могу это сделать?
2 ответа
Сделать можно так:
catch(RuntimeException r)
{
if(r instanceof SomeRunTimeException)
throw null;
else throw r;
}
catch(Exception e)
{
throw e;
}
Примечание: Exception
перехватывает все исключения. Поэтому он расположен внизу.
Вы можете просто сделать:
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;
}
Все остальные отмеченные и непроверенные исключения будут распространяться. Нет необходимости ловить и перебрасывать.
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].