0

我正在编写类似于FilterInputStreamFilterOutputStream的类。

好像

public FilterReadableByteChannel implements ReadableByteChannel {

    // Should I permit null for channel?
    public FilterReadableByteChannel(final ReadableByteChannel channel) {
       // ...
    }
}

而且我发现FilterInputStreamFilterOutputStream都允许null源。

 * @param   in   the underlying input stream, or <code>null</code> if
 *          this instance is to be created without an underlying stream.

问题:

  1. 这有什么实际原因吗?
  2. 是否有可能在创建后更改底层源?

我知道这Why Not?可能是一个答案,但我想知道原始 API 设计者是否有任何理由这样做。

4

1 回答 1

2

这有什么实际原因吗?

是的。即使没有这样声明,类Filter*Stream在概念上也是抽象类。IOW,它们的存在只是为了扩展。子类可能需要在构造后提供inorout参数(例如:懒惰;在第一次实际使用时),并Filter*Stream赋予它们这种灵活性。

是否有可能在创建后更改底层源?

最明显的情况是 source 最初是null. 我想到的其他情况是:1。创建一个子类Filter*Stream作为选择者。IOW,有几个底层流和方法可以从一个切换到另一个。2. 创建一个FilterInputStream连接不同InputStreams 的子类。3. 创建一个子类FilterOutputStream,将输出拆分为不同OutputStream的 s。

我知道为什么不呢?可能是一个答案,但我想知道原始 API 设计者是否有任何理由这样做。

是的:普遍性。

于 2013-08-27T06:05:28.040 回答