Я разработчик на C ++, и я довольно новичок с проверенным и непроверенным исключением в Java. Спецификации исключений в c ++ просто не хороши, и поэтому никто не использует их. Мне нравится проверенное исключение, и у меня есть вопрос, давайте иметь этот интерфейс:
public interface Warehouse {
MyStuff fetch(int id);
}
Хранилище может быть реализовано по-разному: файл, база данных или память (макет объекта для теста).
Теперь, если я хочу реализовать использование файла, я не могу попытаться открыть файл в методе, иначе моя подпись изменится, и мой класс больше не будет реализовывать интерфейс. Также, если у меня был другой класс с другим проверенным исключением, все остальные существующие реализации будут затронуты.
Я вижу два решения:
Перехватить проверенное исключение и выдать другое пользовательское исключение времени выполнения. Я не думаю, что это хорошее решение, поэтому пользователь должен отлавливать исключение времени выполнения, в котором говорится, что файл отсутствует, когда уже существует стандартный и проверенный способ сделать это.
Выполните всю работу в конструкторе класса реализации и оставьте функцию выборки неспособной выбросить. Мне нравится этот способ, объект существует и является действительным или не существует. Единственный недостаток этого подхода заключается в том, что мы не можем реализовать ленивую оценку; нам нужно прочитать и разобрать файл в конструкторе, хотя никто не будет использовать объект. Это не эффективно.
Я что-то упустил? Есть ли лучший способ избежать этой проблемы?