Java FilterInputStream/FilterOutputStream的源为空

Java FilterInputStream/FilterOutputStream的源为空,java,api,io,Java,Api,Io,我在写课程,就像或 看起来像 public FilterReadableByteChannel实现ReadableByteChannel{ //我应该允许通道为空吗? 公共过滤器ReadableByteChannel(最终ReadableByteChannel通道){ // ... } } 我发现和都允许null源代码 * @param in the underlying input stream, or <code>null</code> if *

我在写课程,就像或

看起来像

public FilterReadableByteChannel实现ReadableByteChannel{
//我应该允许通道为空吗?
公共过滤器ReadableByteChannel(最终ReadableByteChannel通道){
// ...
}
}
我发现和都允许
null
源代码

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

  • 这有什么实际原因吗
  • 是否有可能在创建后更改基础源
  • 我知道
    为什么不?
    可能是一个答案,但我想知道原始API设计器这样做是否有任何原因

    这有什么实际原因吗

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

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

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

    我知道为什么不呢?这可能是一个答案,但我想知道是否有任何原因,为什么最初的API设计师这样做


    是:通用性。

    如果“为什么不?”不适合您,您必须询问原始API设计师。