Какова наилучшая практика, когда вам нужно создать исключение, которое не было определено в интерфейсе, который вы реализуете?Выбрасывание исключения не определено в интерфейсе
Вот пример:
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 к бросает пункт в Считыватель интерфейсу , так как этот тип исключения является специфичным для CupcakeReader. Один из способов: Читатель определяет так, чтобы он выдавал некоторый родительский тип, например Исключение, но затем вы теряете контекст для исключения. Что вы должны делать в этой ситуации? Благодаря!
Другая интересная ситуация, которая возникла, связана с интерфейсом, над которым вы не контролируете. В этом случае, каков наилучший способ указать, что возникла проблема?
Для наглядности, вот еще один пример:
public interface Reader
{
public abstract void read();
}
public class CupcakeReader implements Reader
{
public void read() throws CupcakeException {}
}
В этом случае, вы не можете изменить чтения, но вы хотите, чтобы указать, что проблема возникла в CupcakeReader «s чтения метод.
Это еще хуже, чем я думал. Таким образом, вы даже не можете использовать цепочку для обхода системы. Я думаю, вы должны прибегать к (ouch!) 'RuntimeExceptions'. –
Я прибегал к System.err.println и exception.printStackTrace() ;. Является ли это подходящим, или я должен распространять ошибку с помощью RuntimeExecption, как вы сказали? – Scott
Я думаю, что log + ласточка не подходит 99,99% времени. Это распространенная (анти-?) Модель среди разработчиков Java из-за проблемы, представленной здесь. В моей «школе мысли» есть только три действительных способа устранения исключений: реинтронирование, обработка (то есть исправление проблемы), или пусть это пузырится до тех, кто может справиться с этим. Никогда не глотайте. Если что-то пойдет не так, будут последствия. –