Какова цель класса NullObject в Groovy?

Я использовал Groovy в течение всех пяти часов и просто столкнулся с Groovy NullObject. Я считал объяснение Groovy Шаблона Несуществующего объекта, но это не затрагивает NullObject классифицируйте непосредственно; NullObject просто предназначенный, чтобы быть базовым классом для вещей как NullTree и NullJob? Я получаю a NullObject назад в некотором коде, который ожидает a String, и это вызывает отказ во многом как "постоянный клиент" null имел бы.

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

6
задан Pops 19 March 2010 в 19:54
поделиться

1 ответ

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

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

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

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

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

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

8
ответ дан 16 December 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: