几天前,我意识到PrintWriter(以及PrintStream)在写,刷新或关闭时都不会抛出IOException.
相反,它会trouble=true
在发生错误时设置内部标志().
它不可能得到确切的异常,但只有在有一些异常时才会出现(checkError()).
我的问题是:为什么会有这样的行为?API设计不是那么糟糕吗?
我认为既然System.out
和System.err
是的情况下PrintStream
,被提供了一些更轻松的错误处理.正如其他海报所提到的那样,这可能是为1995年左右从C/C++过渡的人们铺平道路.当添加Reader/Writer API时,PrintWriter
创建了与现有版本并行的版本PrintStream
.
一种非常需要此行为的应用程序是日志记录.日志记录是较大应用程序的辅助工具.通常,如果日志记录失败,则不希望整个应用程序失败.因此,System.err
至少忽略异常是有道理的.
我想知道它是否因为IOExceptions被检查,这将要求你在每个System.out周围放置一个try catch块.呼叫.
更新:或者抛出方法签名.
这会很快变得烦人.