Какова цель класса NullObject в Groovy? - PullRequest
6 голосов
/ 19 марта 2010

Я пользуюсь Groovy все пять часов и только что наткнулся на Groovy NullObject. Я прочитал Groovy объяснение Null Object Pattern , но он не затрагивает класс NullObject напрямую; NullObject просто предназначен для использования в качестве базового класса для таких вещей, как NullTree и NullJob? Я получаю NullObject обратно в некотором коде, который ожидает String, и это вызывает сбой, очень похожий на «обычный» null.

Итак, какова цель NullObject? Или, выражаясь по-другому, какое значение NullObject предлагает то, что «обычный» null не предлагает?

1 Ответ

8 голосов
/ 19 марта 2010

Его цель - создать объект null вместо ключевого слова null.

В обычной Java null - это специальное ключевое слово, которое используется для обозначения того, что ссылка не привязана ни к какому объекту ... это прекрасно работает, но не обрабатывает ситуации, в которых вы пытаетесь что-то сделать с ноль ссылка.

Поскольку ссылка null не является объектом, вы ничего не можете с ним сделать, и Java выдаст NullPointerException. С другой стороны, если у вас есть NullObject, ваша ссылка будет указывать на эту, а не на ничто .. конечно, этот NullObject не сможет ничего сделать, когда вы попытаетесь вызвать метод для него, ничто не будет произойдет, но исключение не будет выдано, потому что «* 1016» означает «отсутствие какого-либо объекта», он реализован как объект с очевидной последовательностью, чтобы избежать подобных ситуаций.

Так что Groovy может обрабатывать такие вещи, как object?.methodName(). Если object null groovy будет использовать NullObject, так что эта неявная проверка будет выглядеть примерно так (возможно, это не фактическая реализация, просто чтобы дать вам идею)

if (object instanceof NullObject)
  return new NullObject();
else
  return object.someMethod();

В заключение необходимо преодолеть тот факт, что использование ссылки null в Java всегда будет вызывать NullPointerException.

...