Какой тип checked exception указывать в интерфейсе?
В книге Clean Code (Чистый Код) в главе 17 описан smell (запашок) G6: Code at Wrong Level of Abstraction.
public interface Stack {
Object pop() throws EmptyException;
void push(Object o) throws FullException;
double percentFull();
class EmptyException extends Exception {}
class FullException extends Exception {}
}
В этом интерфейсе метод percentFull явно лишний, т. к. класс стека, реализующий его, может не иметь заданной ёмкости. С этим всё понятно, удаляём метод из интерфейса.
Однако, метод push может бросать исключение FullException, которое, аналогично, не имеет смысла, если реализация стека boundless (безразмерная).
Собственно, вопрос: что делать с этим исключением в Java? В книге ничего по этому поводу не сказано. Я не нашёл обсуждений этого вопроса. Следует ли в интерфейсе заменить исключение на более общее Exception и, соответственно, полностью убрать FullException?
В языках, где не нужно указывать выбрасываемые исключения, такого вопроса не возникает.