На самом деле это пример применения шаблона нулевого объекта .ИМХО, всегда лучше иметь фиктивный объект, чем ноль.Например, вы можете добавить фиктивные методы к нулевому объекту, вместо того, чтобы разбрасывать код с помощью нулевых проверок повсюду.Очень удобно.
Также имя enum
дает вам дополнительную семантику: цена неизвестна , не определена , а не заслуживает доверия , еще не известно ?И что это значит, если цена составляет ноль ?
ОБНОВЛЕНИЕ: Как указывает Аарон Дигулла , для шаблона нулевого объекта требуется память.Но на самом деле это не так в большинстве случаев.В традиционной реализации обычно используется единственный объект для объекта Null, так как нет необходимости в отдельных экземплярах.С перечислениями это становится еще лучше, потому что вы получаете одноэлементную семантику бесплатно.
Другой момент заключается в том, что ссылка null
и ссылка на некоторый объект занимают одинаковый объем памяти (скажем, 4 байта на 32-разрядной машине).Это объект, на который ссылаются, который занимает некоторую дополнительную память.Но если это одноэлементная память, то здесь практически нет перегрузок памяти.