【发布时间】:2017-07-16 14:53:05
【问题描述】:
我在 Hibernate / Spring 上有一个 Web 应用程序,我想在应用程序中使用的枚举很少
public enum MerchantStatus {
NEW("New"),
...
private final String status;
MerchantStatus(String status) {
this.status = status;
}
public static MerchantStatus fromString(String status) {..}
public String toString() {..}
}
和
public enum EmployerType {
COOL("Cool"),
...
private final String type;
EmployerType (String type) {
this.type = type;
}
public static EmployerType fromString(String type) {..}
public String toString() {..}
}
我想创建转换器来将我的枚举对象转换为字符串,反之亦然。是这样的:
public class MerchantStatusConverter implements AttributeConverter<MerchantStatus, String> {
public String convertToDatabaseColumn(MerchantStatus value) {..}
public MerchantStatus convertToEntityAttribute(String value) {..}
}
问题是我不想为每个枚举创建转换器,理想情况下它应该是通用类/接口,我将在这里使用多态性。问题是fromString 是静态方法,似乎不可能创建返回泛型类型的静态方法。
这个问题有解决办法吗?
【问题讨论】:
-
似乎不可能创建返回泛型类型的静态方法 - stackoverflow.com/questions/4409100/…
-
我只是想知道为什么你必须同时使用构造函数和工厂方法?
-
你为什么要为你的枚举创建一个转换器? Hibernate 应该能够正确处理这种情况!将枚举作为字符串保存到数据库并将字符串从数据库转换为枚举!您只需要使用 @Enumerated 注释。还是不是这样?
-
顺便说一下,枚举已经可以在它们的字符串表示之间进行转换,而无需存储额外的东西(使用
enumValue.name()或enumValue.toString()的枚举到字符串;以及使用YourEnumType.valueOf(string)或的字符串到枚举)Enum.valueOf(clazz, string))。内置字符串表示是枚举的确切编写方式,在您的情况下是全大写,而您想要的是首字母大写,所以也许您可以进行一些简单的大小写转换。