我正在编写像FilterInputStream或FilterOutputStream这样的课程。
看起来像
public FilterReadableByteChannel implements ReadableByteChannel {
// Should I permit null for channel?
public FilterReadableByteChannel(final ReadableByteChannel channel) {
// ...
}
}
我发现FilterInputStream和FilterOutputStream都允许null
来源。
* @param in the underlying input stream, or <code>null</code> if
* this instance is to be created without an underlying stream.
问题:
我知道Why Not?
可能是一个答案,但我想知道原始API设计师是否有任何理由这样做。
答案 0 :(得分:2)
这有什么实际的理由吗?
是。即使没有这样声明,类Filter*Stream
在概念上也是抽象类。它,它们只存在于扩展中。子类可能需要在构造之后提供in
或out
参数(例如:懒惰;在第一次实际使用时),Filter*Stream
为他们提供这种灵活性。
是否有可能在创建后更改基础源?
明显的情况是源最初是null
。我想到的其他案例包括:
1.创建充当选择器的Filter*Stream
子类。 IOW,有几个基础流和方法从一个切换到另一个。
2.创建连接不同FilterInputStream
的{{1}}的子类。
3.创建InputStream
的子类,将输出拆分为不同的FilterOutputStream
。
我知道为什么不呢?可能是一个答案,但我想知道原始API设计师是否有任何理由这样做。
是:普遍性。