Какую рекомендацию следует придерживаться, когда вам нужно создать исключение, которое не было определено в интерфейсе, который вы реализуете?
Вот пример:
public interface Reader
{
public abstract void read() throws IOException;
}
public class CarrotReader implements Reader
{
public void read() throws IOException {}
}
public class CupcakeReader implements Reader
{
public void read() throws IOException, CupcakeException {}
}
В этом случае у вас есть конкретное исключение, которое возникает при чтении кексов, поэтому вы хотите создать исключение, связанное с этим. Однако Reader не определяет этот тип исключения в своем интерфейсе, так что вы делаете? Кроме того, нет смысла добавлять CupcakeException к предложению throws в интерфейсе Reader , поскольку этот тип исключения относится только к CupcakeReader . Одним из способов решения этой проблемы является Reader определение read таким образом, чтобы он выбрасывал некоторый родительский тип, например Exception , но тогда вы теряете контекст для исключения. Что вы должны сделать в этой ситуации? Спасибо!
Другая интересная ситуация, которая возникла, связана с интерфейсом, который вы не можете контролировать. Как лучше всего указать, что в этом случае возникла проблема?
Для иллюстрации приведу еще один пример:
public interface Reader
{
public abstract void read();
}
public class CupcakeReader implements Reader
{
public void read() throws CupcakeException {}
}
В этом случае вы не можете изменить Reader , но хотите указать, что возникла проблема в CupcakeReader read method.