Java中的文件的nullobject

时间:2009-07-14 22:23:09

标签: java design-patterns file null mocking

我有一个偶尔会为null个对象传递File的类。在正常操作期间,它使用Scanner类来解析文件。

我认为我可以用nullobjects(Gang of Four风格)替换null,而不是通过对File对象进行File检查来乱丢我的代码。

然而,File似乎并未真正设计为扩展。有没有人对如何做到这一点有任何指示?

3 个答案:

答案 0 :(得分:2)

您可以使用NullObject替换使用该文件的对象

例如,您可以使用NullInputStream并将其传递给扫描仪。

在:

 public void whatever( File f ) { 

     Scanner scanner = new Scanner( f );

     ...
 }

 public void whatever( File f ) { 

      Scanner scanner = new Scanner( getInputStreamFrom( f ) );

      ...
 }

并将该方法实现为:

 private final InputStream getInputStreamFrom( File f ) {

      if( f == null && !f.exists() ) { 
          return NullInputStream.instance;
      }

      return new InputStream( new FileInputStream( f ) );

 }


 class NulllInputStream extends InputStream {

      private final static NullInputStream instance = new NullInputStream();

      private NullInputStream() {
      }

      public int read() { 
          return -1; 
      }
      .... other relevant methods here... 
 }

显然是仔细编码而不是3分钟。就像我一样:) :) :)

答案 1 :(得分:0)

为什么不能只将File对象的入口点控制到程序的逻辑中并在那里执行null检查?

另一种选择是使用类似于封装数据的单独接口:例如Reader。您当然可以提供NullReader实施

答案 2 :(得分:0)

空对象模式是围绕接口设计的,而不是具体的对象。

要解决此问题,您可以创建一个新接口,其中包含您在File中使用的方法,然后创建一个具体实现,该实现仅委托给内部的File。然后,您可以创建null实现,这将实现调用。

当然,这对于删除一个空检查似乎有点过分。