Когда вы определяете перечисление для чего-то, что может быть "неопределенным" в ваших интерфейсах, вы должны
- определить отдельное значение перечисления для этого, или
- просто использовать 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 или нет), но он кажется немного чище и немного менее вводящим в заблуждение (?)
задан user449236 22 August 2011 в 07:56
поделиться