nullobject для файлов в Java - PullRequest
       42

nullobject для файлов в Java

1 голос
/ 15 июля 2009

У меня есть класс, который иногда получает null для File объектов. Во время нормальной работы он использует класс Scanner для анализа файла.

Вместо того, чтобы засорять мой код проверками null против File объектов, я подумал, что смогу заменить File s на nullobjects (Gang of Four).

Однако, похоже, что File на самом деле не предназначен для расширения. У кого-нибудь есть указания, как это сделать?

Ответы [ 3 ]

2 голосов
/ 15 июля 2009

Вы можете заменить объект, который использует файл, на NullObject

Например, вы можете использовать NullInputStream и передать его сканеру.

До:

 public void whatever( File f ) { 

     Scanner scanner = new Scanner( f );

     ...
 }

* После 1008 *

 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 минуты. как и я :) :) :)

0 голосов
/ 15 июля 2009

Шаблон нулевого объекта был разработан вокруг интерфейсов, а не конкретных объектов.

Чтобы обойти это, вы можете создать новый интерфейс, который содержит методы, которые вы используете из File, а затем создать конкретную реализацию, которая просто делегирует File, содержащемуся внутри. Затем вы можете создать свою нулевую реализацию, которая будет блокировать вызовы.

Конечно, это похоже на излишнее удаление одной пустой проверки.

0 голосов
/ 15 июля 2009

Почему вы не можете просто контролировать точку входа объекта File в логику вашей программы и выполнять проверку null там?

Другой вариант - использовать что-то вроде отдельного интерфейса, который инкапсулирует данные: например, Reader. Вы, конечно, могли бы предоставить NullReader реализацию

...