【发布时间】:2014-04-17 07:24:44
【问题描述】:
今天我正在使用 Java 类 StringReader,我发现它在 read 方法上抛出 IOException 非常烦人。我知道它扩展了Reader 类,其中方法read 抛出IOException,但我认为StringReader 不需要它。此类不使用任何可能导致错误的外部资源。
经过短暂调查,我发现StringReader#read 抛出 IOException 如果此类读取的字符串为 null 但事实上这 不可能发生,因为如果我们尝试将 null 传递给 @ 987654327@构造函数它抛出NPE。
你怎么看,总是抛出与超类相同的异常是一种好习惯吗?
编辑: 正如 U Mad Reader 所指出的,它是一个类而不是接口。
【问题讨论】:
-
StringReader中的 throws 声明是强制性的,因为接口Reader需要它,即使实现类永远不会抛出这样的异常。 -
投反对票的原因是什么?
-
Reader 是一个类,而不是一个接口,您可以使用一个实现来覆盖一个函数,而声明的异常更少或没有。它会起作用。所以 StringReader 没有理由声明它们。
-
@UMad,这是真的,但 Reader 是抽象的,读取的方法来自 Readable 接口。
-
没关系。 StringReader 的制造者可以在没有 IOException 的情况下声明 read。这是他们的一个错误。
标签: java api stringreader