gpt4 book ai didi

java - 为什么 Java StringReader 会抛出 IOException?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:15:35 25 4
gpt4 key购买 nike

今天我在使用 Java 类 StringReader,我发现它在 read 方法上抛出 IOException 非常烦人。我知道它扩展了 Reader 类,其中方法 read 抛出 IOException 但我认为 StringReader 不需要它。此类不使用任何可能导致错误的外部资源。

经过简短调查后,我发现如果此类读取的字符串为 null,则 StringReader#read 会抛出 IOException 但事实上这不可能发生 因为如果我们尝试将 null 传递给 StringReader 构造函数,它会抛出 NPE。

您怎么看,总是抛出与父类(super class)相同的异常是一种好习惯吗?


编辑:正如 U Mad Reader 所指出的,是一个类而不是接口(interface)。

最佳答案

我认为如果您的实现确保它永远不会发生,那么抛出与父类(super class)或接口(interface)定义相同的异常不是一个好习惯。我总是将签名减少到所需的最低限度。

IOException 是所有可以想象到的实现所必需的,包括文件源、流和套接字等。否则,此类实现无法将其错误通知为已检查的异常。但是,如果一个实现不需要抛出一个已检查的异常(这通常会让调用代码很烦人),那么从实现类中移除它并没有什么害处,但会减轻一些负担。

更新:

我找到了方法 read() 必须 抛出 IOException 的原因:因为为 close() 方法定义的契约。来自 JavaDoc:

Closes the stream and releases any system resources associated with it. Once the stream has been closed, further read(), ready(), mark(), or reset() invocations will throw an IOException. Closing a previously closed stream has no effect.

关于java - 为什么 Java StringReader 会抛出 IOException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23127020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com