【发布时间】:2016-09-22 20:10:52
【问题描述】:
为什么ByteArrayOutputStream.close 声明为throws IOException?
首先,事实上它不能扔任何东西,因为它的身体是空的。其次,在法律上它不能抛出任何东西,因为它的文档说“关闭 ByteArrayOutputStream 没有效果”。
这不是(不重要,但仍然)一个小错误吗?
是的,我知道它的超类OutputStream 实现了Closable,其close 方法允许抛出IOException。但是没有人禁止使用没有 throw 规范的 close 方法覆盖它(在 ByteArrayOutputStream 中)。 (即使在某些古老的 Java 版本中禁止用较少抛出的方法覆盖较多抛出的方法,更改 ByteArrayOutputStream.close 定义 现在 也不会是不兼容的更改。)
【问题讨论】:
-
如果定义被改变,捕获IOException的现有代码将得到编译错误
Unreachable catch block for IOException. This exception is never thrown from the try statement body。 -
@saka1029:我想,你是在正确的轨道上。
-
@saka1029,你是对的(我认为它会导致警告,而不是错误)。
标签: java stream bytearrayoutputstream