在我们的项目中,我们有许多实现特定接口(interface)的枚举,这是一种如何控制其在数据库中的支持的方式。核心是一个方法getCode
它返回存储在数据库中的值。
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
在数据库中支持枚举(和所有其他)值(value)。
在我的场景中,我需要 Moxy 来序列化 MONDAY
作为MON
, 这可以通过
- 一个
@XmlEnumValue("MON")
或 - 适配器
XmlAdapter<String, Weekday>
但是,我想知道是否有可能提供更优雅的解决方案,既不需要每个枚举的适配器,也不需要枚举实现中的附加代码(例如 @XmlEnumValue
)。
一种透明地用于实现我的 PersistableEnum
的所有枚举的方法界面。
我没有成功执行 XmlAdapter<String, PersistableEnum>
因为我没有要解码的类的上下文;因此,我不知道是哪个PersistableEnum
使用。 (虽然编码部分很容易实现。)
最佳答案
我认为这是不可能的。恐怕在 MOXy/JAXB RI 中没有这样的机制。
关于java - 控制 Moxy 如何以通用方式序列化和反序列化枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29474639/