Java поиск enum из enum - PullRequest
       4

Java поиск enum из enum

1 голос
/ 23 марта 2019

У меня есть два перечисления в двух разных классах (показано ниже):

enum State {
 NOCAR, SOLD, TO_BUY, TOYOTA, HONDA, NISSAN, BMW, MERCEDES, NO_MONEY
}

enum Car {
 TOYOTA, HONDA, NISSAN, BMW, MERCEDES
}

, поскольку вы можете видеть, что перечисление State содержит все возможности перечисления Car.

Итак, я хочу сделать что-то вроде этого:

public void sayHello(Car brand) {
  State s = ... // how to convert the brand parameter into the corresponding State enum?
  ...
  ...
}

Итак, я хочу иметь возможность преобразовать данное перечисление Car в перечисление State в минимальном коде, который легко понять.Я знаю, что могу использовать переключатель, но это большая потеря кода.Поэтому, пожалуйста, помогите мне здесь.

Ответы [ 2 ]

3 голосов
/ 23 марта 2019

Вы можете предоставить State enum частное поле типа Car. Затем вы добавляете приватный конструктор, который принимает объект Car и сохраняет его в указанном поле. Тогда вы можете объявить константы вашего состояния как

SOLD(null), BMW(Car.BMW),...

Но: концептуально это не имеет смысла. Автомобиль - это Автомобиль, и, возможно, транзакция имеет два свойства - состояние и автомобиль (когда состояние ПРОДАНО), но состояние не должно отражать тип автомобиля. Значение: что бы вы ни делали, чтобы получить перечисление Car из экземпляра State, ваша настоящая проблема - ваш дизайн. Вы дублируете вещи, имея «одинаковые» константы уже в двух местах.

Ваш вопрос спрашивает, как наилучшим образом справиться с симптомом плохого дизайна, и реальный ответ: вы этого не делаете. Вы исправляете конструкцию, а не фиксируете реализацию.

3 голосов
/ 23 марта 2019

Имея значение Car, вы можете просто использовать поиск по имени:

public void sayHello(Car brand) {
  State s = State.valueOf(brand.name());
  ...
}

Пока все имена значений Car находятся в перечислении State, это всегда должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...