Должны ли мы создавать определенный класс Exception
для каждого типа сущности?
Если вызывающие программы вашего пользователя могут разумно восстановиться после сбоя при поиске определения сущности и получат пользуот возможности принять другую стратегию восстановления для типа объекта, тогда да.В противном случае нет.
Можем ли мы безопасно использовать дженерики?Как и этот класс, NotFoundException расширяет Exception, а затем конструктор заботится о том, чтобы объявить, с каким типом сущности мы имеем дело?
Это не поможет вызывающим лицам вашего кода переключиться на тип сущности, связанный с ошибкой..
Даже если вы определите тип исключения MyParameterizedException<T>
, то из-за стирания типа вызывающая сторона не сможет выполнить
try {
callYourCode();
} catch (MyParameterizedException<TypeA> ex) {
// some handling code
} catch (MyParameterizedException<TypeB> ex) {
// some different handling code for type b
}
, поскольку при стирании типа это выглядит как
try {
callYourCode();
} catch (MyParameterizedException ex) {
// some handling code
} catch (MyParameterizedException ex) {
// some different handling code for type b
}
и второй блок catch
будет недоступным кодом и будет отклонен во время компиляции на javac
.Первый блок catch будет введен для типа b и типа a (а также для любых других типов).
Если мы должны генерировать конкретное исключение и не использовать обобщенные значения, если эти исключения будут расширяться илиреализовать NotFoundException
абстрактный класс или интерфейс?
Если вызывающие ваш код будут удивлены, если они этого не сделают, то да.
Если получатели вашего кода получат выгоду отобработка сбоев объектов с помощью кода, который обрабатывает другие NotFoundException
s, тогда да.
Если вызывающие программы вашего кода, скорее всего, не захотят, чтобы сбои определения определения типа объекта обрабатывались так же, как и другие NotFound
условия тогда нет.