Следует ли определять нулевое / неизвестное значение для перечислений Java?

Когда вы определяете перечисление для чего-то, что может быть "неопределенным" в ваших интерфейсах, вы должны

  • определить отдельное значение перечисления для этого, или
  • просто использовать enumValue = null для тех ситуации?

Например,

serviceX.setPrice (Price priceEnum)

enum Price {
 CHEAP, EXPENSIVE, VERRRY_EXPENSIVE, UNKNOWN
}

и priceEnum.UNKNOWN при необходимости

или

enum Price {
 CHEAP, EXPENSIVE, VERRRY_EXPENSIVE
}

и priceEnum = null при необходимости?

Небольшое обсуждение этого вопроса. Некоторые моменты, которые приходят в голову:

  • использование Price.UNKNOWN сохраняет некоторый код «if (price == null)». Вы можете обрабатывать все значения Price x в одном случае switch-case
  • В зависимости от технологии просмотра, может быть проще локализовать Price.UNKNOWN
  • , используя Price.UNKNOWN, что вызывает проблему с "магическим числом" в коде, IMO . Здесь у нас есть Price.UNKNOWN, в другом месте, возможно, Color.UNDEFINED, Height.NULLVALUE и т. Д.
  • , использование priceValue = null более единообразно с тем, как другие типы данных обрабатываются в Java. У нас есть Integer i = null, DomainObject x = null, String s = null также для неизвестных значений, не так ли?
  • Price.UNKNOWN заставляет вас решить, разрешено ли нулевое значение универсально для всех вариантов использования. У нас может быть метод Price getPrice ()который может возвращать Price.UNKNOWN и setPrice (Price p), которому не разрешено принимать Price.UNKNOWN. Поскольку Price.UNKNOWN всегда включается в значения перечисления, эти интерфейсы выглядят немного нечистыми. Я знаю, что у priceValue = null такая же проблема (вы не можете определить в интерфейсе, принимается ли null или нет), но он кажется немного чище и немного менее вводящим в заблуждение (?)
37
задан user449236 22 August 2011 в 07:56
поделиться