Существует ли вызывающая исключение замена для System.out.println в JAVA и других методов потока печати?

#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 😉