Настроить
Поэтому у меня есть два исключения:
ProfileException extends Exception
UserException extends Exception
Один из методов моего вспомогательного класса выбрасывает эти два исключения:
Long getSomething() throes ProfileException, UserException
Я вызываю этот метод внутри блока catch try.
try
{
Long result = helperObj.getSomething();
}
catch(ProfileException pEx)
{
//Handle profile exception
}
catch(UserException uEx)
{
//Handle user exception
}
Вопрос
Однако я получаю следующую ошибку.
Unreachable catch block for UserException. It is already handled by the catch block for ProfileException.
Как я могу различать и обрабатывать отдельно в зависимости от типа исключения, созданного этим методом getSomething()?
Поскольку оба исключения находятся на одном уровне в иерархической иерархии, вы должны использовать, например, следующие
try {
Long result = helperObj.getSomething();
}
catch(Exception ex) {
if (ex instanceOf ProfileException) {
//Handle profile exception
} else if (ex instanceOf UserException) {
// Handle user exception
}
}
Эта ошибка указывает, что UserException расширяет свойство ProfileException
Я вполне убежден, что UserException
вероятно, extends ProfileException
. Если вы его изменили, вероятно, что IDE не скомпилировала последнюю версию (например, из-за ошибок компилятора). Поэтому вы можете запустить команду clean и build (доступна в большинстве популярных IDE).
Вы можете просто решить проблему, заменив блоки catch
:
try {
Long result = helperObj.getSomething();
} catch(UserException uEx) {
//Handle user exception
} catch(ProfileException pEx) {
//Handle profile exception
}
Однако большинство IDE всегда будут записывать блоки catch
из определенных типов в более общие типы, чтобы предотвратить такой мертвый код.
UserException
должен расширятьProfileException
, иначе это не может быть правдой