Почему вы использовали оператор try / catch, когда вы уже выбросили Проверенное исключение ?
Проверенное исключение обычно используется в некоторых языках, таких как C ++ или Java, ноне на новом языке, как Котлин.Я лично ограничиваю его использование.
Например, у меня есть такой класс:
class ApiService{
Response getSomething() throw Exception();
}
, который выглядит чистым и читаемым, но подрывает полезность механизма обработки исключений.Практически, getSomething()
не вызывает выбрасывание проверенного исключения, но все равно нужно вести себя как оно?Это работает, когда есть кто-то выше ApiService, который знает, как справиться с непредсказуемыми или непредсказуемыми ошибками вроде этой.И если вы действительно можете знать, как с этим справиться, тогда используйте что-то вроде приведенного ниже примера, в противном случае Непроверенное исключение будет достаточно.
public Response getSomething(Request req) throws Exception{
if (req.someProperty == 1) {
Response res = new Response();
// logic
} else {
thows Exception("Some messages go here")
}
}
Я призываю вассделайте так:
public Response getSomething(Request req){
if (req.someProperty == 1) {
Response res = new Response();
// logic
return res;
} else {
return ErrorResponse("error message"); // or throw RuntimeException here if you want to
}
}
Для получения более подробной информации, Kotlin
, о которой я упоминал ранее, не поддерживает Проверенное исключение по многим причинам.
Следующеепример интерфейса JDK
, реализованного классом StringBuilder
:
Appendable append(CharSequence csq) throws IOException;
О чем говорит эта подпись?Он говорит, что каждый раз, когда я добавляю строку к чему-либо (StringBuilder
, какой-то журнал, консоль и т. Д.), Я должен ловить эти IOExceptions
.Зачем?Потому что он может выполнять IO
(Writer также реализует Appendable
) ... Таким образом, он приводит к такому виду кода повсюду:
try {
log.append(message)
}
catch (IOException e) {
// Must be safe
}
И это не хорошо, см. ЭффективноJava, 3-е издание, элемент 77 : не игнорируйте исключения.
Просмотрите следующие ссылки: