首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >改变枚举值

改变枚举值
EN

Stack Overflow用户
提问于 2016-08-28 13:04:41
回答 3查看 11.8K关注 0票数 4

为什么下面的代码会抛出异常?

我需要持久化枚举值,并且我猜测将枚举值持久化到数据库中的最佳实践是将它们存储为小写字符串文本,因此这是一项工作。

代码语言:javascript
复制
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数据库映射程序尝试从数据库自动填充实体对象时,我可以将小写字符串文本(在数据库中)转换为它们的上百分比枚举常量。我将反驳说,坚持他们的名字本身(即上感知)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-28 13:10:29

我需要持久化枚举值,我猜

不需要那种复杂的方法..。

而是做一些类似的事情

代码语言:javascript
复制
public enum Type {

SWIPE_BUTTON, DROP_DOWN, RADIO_BUTTON, CHECK_BOX;
}

并获取枚举数中常量的名称(这是最后需要的.)

保存Type.name()代替..。

票数 2
EN

Stack Overflow用户

发布于 2016-08-28 13:08:32

Enum.valueOf与名称一起工作,它不适用于您分配的字符串,因此您应该使用Type.valueOf("SWIPE_BUTTON"),因为名称是大写的。

很可能你指的是Type.getEnum("swipe_button")

票数 1
EN

Stack Overflow用户

发布于 2016-08-28 13:09:51

当您迭代可能的枚举常量时,如

代码语言:javascript
复制
for (Type t : values() ) {
  System.out.println("t name:" + t. name());

你会发现枚举是建立在它们的名字上的。

请记住:从字符串构建枚举必须适用于--所有类型的枚举。因此,整个机制是基于每个枚举常数的一个固定性质-而这将是.它的名字。

因此:如果您想使用那个神奇的"valueOf()“方法,那么您必须遵循这个方法及其背后的魔力所使用的规则。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39191564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档