Допустим, у меня есть следующий интерфейс Java, который я не могу изменить:
public interface MyInterface {
public void doSomething();
}
А теперь реализующий его класс выглядит так:
class MyImplementation implements MyInterface {
public void doSomething() {
try {
// read file
} catch (IOException e) {
// what to do?
}
}
}
Я не могу восстановиться после того, как не прочитал файл.
Подкласс RuntimeException
может явно помочь мне, но я не уверен, что это правильно: проблема в том, что это исключение не будет задокументировано в классе, и пользователь класса, возможно, будет получить это исключение и ничего не знать о его решении.
Что я могу сделать?
Мы все согласны: интерфейс неисправен.
Решение, которое я выбрал
Я наконец решил написать MyVeryOwnInterface
, который расширяет MyInterface
и добавляет как часть сигнатуры ошибочных методов MyRuntimeException
:
public interface MyVeryOwnInterface extends MyInterface {
public void doSomething() throws MyRuntimeException;
}
class MyImplementation implements MyVeryOwnInterface {
public void doSomething() throws MyRuntimeException {
try {
// read file
} catch (IOException e) {
throw new MyRuntimeException("Could not read the file", e);
}
}
}