В нашем проекте у нас много перечислений, которые реализуют определенный интерфейс, который является способом управления его поддержкой в базе данных. Ядром является метод getCode
, который возвращает значение, которое хранится в базе данных.Управление тем, как Moxy сериализует и десериализует перечисления в общем виде
Это значение должно использоваться Moxy для сортировки и сортировки.
Например, перечисление выглядит следующим образом:
enum Weekday implements PersistableEnum<String> {
MONDAY("MON"),
// .. all the remaining days
;
// the constructor which sets the code, etc.
@Override
public String getCode() {
return code;
}
}
с помощью интерфейса PersistableEnum
(упрощенный для простоты):
interface PersistableEnum<C> {
C getCode();
}
перечисление (и все другие) поддерживается в базы данных с использованием значения code
.
В моем случае, мне нужно Moxy сериализовать MONDAY
в MON
, что можно достичь с помощью
@XmlEnumValue("MON")
или- адаптер
XmlAdapter<String, Weekday>
Однако, я хотел бы знать, возможно ли предоставить более элегантное решение, которое не требует ни адаптера для каждого перечисления, ни дополнительного кода в реализации перечисления (например, @XmlEnumValue
).
Способ, который прозрачно используется для всех перечислений, которые реализуют мой интерфейс PersistableEnum
.
У меня не было успеха с реализацией XmlAdapter<String, PersistableEnum>
, так как у меня нет контекста класса, который должен быть unmarshalled; и поэтому я не знаю, какой PersistableEnum
использовать. (Маршаллинг часть легко реализовать.)