Лучший способ для отображения enum с помощью int - PullRequest
2 голосов
/ 23 января 2012

У меня есть небольшая дилемма, что было бы лучше - если бы я установил в качестве поля моей карты сущностей:

@ManyToMany
Map<SomeEnum, Integer> field;

или List и создал дополнительный класс для отображения enum с помощью int:

@ManyToOne
List<WrapperClass> field;

и класс обёртки:

@Entity
class WrapperClass {

  @Basic(optional=false)
  @Enumerated(EnumType.STRING)
  public SomeEnum someEnum;

  public int value;
}

1 Ответ

1 голос
/ 23 января 2012

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

Поскольку вы, похоже, хотите сделать отображение из enum в int, первой будет более естественная структура данных, то есть

Map<SomeEnum, Integer> field;

просто потому, что это очень хорошо определяет отображение. Вы получите лучшее время поиска и структуру данных, которая предназначена для связи ключа (в данном случае SomeEnum) со значением (Integer).

С List или Set используемая вами структура данных не так естественно подходит для поиска того, какое значение отображается каким-либо экземпляром SomeEnum. Вам придется написать свой собственный Comparator или compareTo для своего WrapperClass и написать больше кода, который уже позаботился бы о вашем, если вы используете Map<SomeEnum, Integer> field.

... разве есть какая-то конкретная причина, по которой вам нужен другой способ ее кодирования? Какие-то ограничения, которые мешают вам использовать этот подход?

...