Когда вы определяете перечисление для того, что может быть "undefined" в ваших интерфейсах, вы должны
- определите для него отдельное значение перечисления или
- просто используйте enumValue = null для этих ситуаций?
Например,
serviceX.setPrice(Цена 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 все значения в одном коммутационном футляре
- В зависимости от технологии просмотра может быть проще локализовать Price.UNKNOWN
- используя метод Price.UNKNOWN причины "магического номера" в коде, IMO. Здесь у нас есть Price.UNKNOWN, в другом месте, возможно, Color.UNDEFINED, Height.NULLVALUE и т.д.
- using priceValue = null более равномерен с тем, как обрабатываются другие типы данных в Java. Мы имеем Integer я = null, DomainObject x = null, String s = null для неизвестных значений, не так ли?
- Price.UNKNOWN заставляет вас решить, разрешено ли null-значение для всех случаев использования. У нас может быть метод Price getPrice(), который может возвращать Price.UNKNOWN и setPrice (Цена p), которым запрещено принимать Price.UNKNOWN. Поскольку Price.UNKNOWN всегда включен в значения перечисления, эти интерфейсы выглядят немного нечистыми. Я знаю, что priceValue = null имеет ту же проблему (вы не можете определить в интерфейсе, принимается ли null или нет), но он чувствует себя немного чище и немного менее вводит в заблуждение (?)