#java #exception #printstream
#java #исключение #printstream
Вопрос:
Я уже читал «Java: почему классы PrintWriter или PrintStream не генерируют исключение?» но меня не интересуют причины / оправдания, почему эти классы не генерируют исключения при ошибках вывода.
Что я хочу знать, так это как на самом деле заставить их генерировать исключения.
Или что еще я могу сделать с наименьшим объемом работы, чтобы получить класс замены для PrintStream, который делает то же самое, но проверяет наличие ошибок и генерирует исключения.
Очевидным способом было бы реализовать класс-оболочку для PrintStream, предоставляющий методы с теми же именами, которые вызывают соответствующий метод PrintStream, проверяют наличие ошибок и генерируют исключение, если ошибка была обнаружена.
Однако, похоже, это ужасно много работы, потому что в PrintStream много методов.
Итак, мне интересно, есть ли более простой способ.
Или, возможно, кто-то другой уже выполнил эту работу, если не было другого способа обойти очевидный подход?
Мне трудно поверить, что я был бы первым, кто считает хорошей идеей немедленную проверку ошибок вывода при записи в некоторый поток вывода, вместо того, чтобы радостно продолжать в случае ошибок вывода, как будто ничего не произошло.
Комментарии:
1. Есть
checkError
метод наPrintStream
, если это поможет…2. Я знаю, но в любом случае спасибо за напоминание. На самом деле я хочу, чтобы методы сами вызывали checkError() и выдавали исключение IOException, если была обнаружена ошибка, вместо того, чтобы оставлять эту задачу вызывающему (потому что это именно такой утомительный код, которого я хотел бы избежать).
3. Поскольку
IOException
это проверяемое исключение, вы не сможете переопределитьPrintStream
и заставить его генерировать их, потому что они являются проверяемыми исключениями : ( Вы могли бы создать непроверенное исключение или обернутьPrintStream
в новый класс (но, очевидно, тогда вы не сможете использовать его вместоPrintStream
🙁 : (4. У меня нет проблем с созданием какого-либо другого (и непроверенного) исключения, IOException просто на первый взгляд казалось таким подходящим. Я просто хочу сделать что-то вроде System.out.println() за исключением того, что он автоматически вызывает checkError() внутренне и выдает исключение любого типа в случае ошибки вывода.
5. Ваш последний комментарий имеет гораздо больше смысла, чем ваш вопрос. Итак, мой вопрос к вам: с какой реальной проблемой вы столкнулись? Покажите некоторый фактический код с имеющимся у вас Printwriter и требуемым поведением. Я уверен, что есть способ сделать это без перезаписи / редизайна или разветвления Java 😉