"Основное различие между вещью это может пойти не так, и вещь, которая не может ошибиться в том, что когда вещь, которая не может пойти не так, как надо идет не так, как обычно оказывается невозможно получить или восстановить". -Дуглас Адамс
У меня есть класс FileItems. Конструктор FileItems принимает файл и генерирует исключение (FileNotFoundException), если файл не существует. Другие методы этого класса также связаны с файловыми операциями и, таким образом, могут вызывать исключение FileNotFoundException. Я бы хотел найти лучшее решение. Решение, которое не требует, чтобы другие программисты обрабатывали все эти крайне маловероятные FileNotFoundExceptions.
Факты:
- Файл проверен, чтобы существовать, но крайне маловероятная возможность существует, что через некоторую серьезную ошибку реальность файл может быть удален до вызова этого метода.
- Так как вероятность того, что 1 произойдет, очень непохожа и невосстановима, я бы предпочел определить неконтролируемое исключение.
- Файл уже найден, чтобы существовать, заставляя других программистов писать код и улавливать проверенное FileNotFoundException кажется утомительным и бесполезным. В этот момент программа должна полностью завершиться. Например, всегда есть вероятность, что компьютер может загореться, но никто не настолько сумасшедший, чтобы заставить других программистов обрабатывать это как проверенное исключение.
- Время от времени я сталкиваюсь с проблемой исключения, и каждый раз, когда сталкиваюсь с этой проблемой (мое старое решение), вы определяете выборочные исключения, отмеченные флажками, и добавляет код-раздувание.
В настоящее время код выглядит следующим образом:
public Iterator getFileItemsIterator() {
try{
Scanner sc = new Scanner(this.fileWhichIsKnowToExist);
return new specialFileItemsIterator(sc);
} catch (FileNotFoundException e){ //can never happen}
return null;
}
Как я могу сделать это лучше, не определяя пользовательское исключенное исключение FileNotFoundException? Есть ли способ применить исключение checkedException к исключению uncheckException?