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