FilterInputStream / FilterOutputStream的null源

时间:2013-08-27 05:39:26

标签: java api io

我正在编写像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. 是否有可能在创建后更改基础源?
  3. 我知道Why Not?可能是一个答案,但我想知道原始API设计师是否有任何理由这样做。

1 个答案:

答案 0 :(得分:2)

  

这有什么实际的理由吗?

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

  

是否有可能在创建后更改基础源?

明显的情况是源最初是null。我想到的其他案例包括:  1.创建充当选择器的Filter*Stream子类。 IOW,有几个基础流和方法从一个切换到另一个。  2.创建连接不同FilterInputStream的{​​{1}}的子类。  3.创建InputStream的子类,将输出拆分为不同的FilterOutputStream

  

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

是:普遍性。