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设计师。