为什么下面的代码会抛出异常?
我需要持久化枚举值,并且我猜测将枚举值持久化到数据库中的最佳实践是将它们存储为小写字符串文本,因此这是一项工作。
public enum Type {
SWIPE_BUTTON("swipe_button"), DROP_DOWN("drop_down"), RADIO_BUTTON("radio_button"), CHECK_BOX("check_box");
private final String label;
private Type (String label) {
this.label = label;
}
public String getValue() {
return label;
}
@Override
public String toString() {
return getValue();
}
public static Type getEnum (String value) {
for (Type type : values())
if (type.getValue().equals(value)) return type;
throw new IllegalArgumentException("invalid value for type");
}
public static void main (String[] args) {
System.out.println(Type.valueOf("swipe_button"));
}
}我发现了这种方法,here。
更新
看起来我实际上是试图覆盖valueOf方法,而答案是不可能这样做的。我试图重写此方法,以便当我的JPA数据库映射程序尝试从数据库自动填充实体对象时,我可以将小写字符串文本(在数据库中)转换为它们的上百分比枚举常量。我将反驳说,坚持他们的名字本身(即上感知)。
发布于 2016-08-28 13:10:29
我需要持久化枚举值,我猜
不需要那种复杂的方法..。
而是做一些类似的事情
public enum Type {
SWIPE_BUTTON, DROP_DOWN, RADIO_BUTTON, CHECK_BOX;
}并获取枚举数中常量的名称(这是最后需要的.)
保存Type.name()代替..。
发布于 2016-08-28 13:08:32
Enum.valueOf与名称一起工作,它不适用于您分配的字符串,因此您应该使用Type.valueOf("SWIPE_BUTTON"),因为名称是大写的。
很可能你指的是Type.getEnum("swipe_button")。
发布于 2016-08-28 13:09:51
当您迭代可能的枚举常量时,如
for (Type t : values() ) {
System.out.println("t name:" + t. name());你会发现枚举是建立在它们的名字上的。
请记住:从字符串构建枚举必须适用于--所有类型的枚举。因此,整个机制是基于每个枚举常数的一个固定性质-而这将是.它的名字。
因此:如果您想使用那个神奇的"valueOf()“方法,那么您必须遵循这个方法及其背后的魔力所使用的规则。
https://stackoverflow.com/questions/39191564
复制相似问题