Closed. This question is opinion-based。它当前不接受答案。
                            
                        
                    
                
            
                    
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
                        
                        6年前关闭。
                    
                
        

我正在编写类似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.


题:


有什么实际原因吗?
创建后是否有可能更改基础源?


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

最佳答案

有什么实际原因吗?


是。即使未声明,类Filter*Stream在概念上也是抽象类。 IOW,它们仅存在以进行扩展。子类在构造后可能需要提供inout参数(例如:懒惰;首次实际使用时),而Filter*Stream提供了这种灵活性。


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


很明显的情况是当source最初是null时。我想到的其他情况是:
 1.创建Filter*Stream的子类作为选择器。 IOW具有从一种切换到另一种的几种基础流和方法。
 2.创建FilterInputStream的子类,以连接不同的InputStream
 3.创建FilterOutputStream的子类,将输出分成不同的OutputStream


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


是的:普遍性。

关于java - FilterInputStream/FilterOutputStream的空源,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18457767/

10-10 10:03