如何在java中制作像枚举一样的键值[重复]
Posted
技术标签:
【中文标题】如何在java中制作像枚举一样的键值[重复]【英文标题】:How to make key value like enum in java [duplicate] 【发布时间】:2017-03-25 15:44:13 【问题描述】:我需要创建一个Enum
,其中包含一些带空格的字符串及其在int
中的值,例如:
public enum status
Active(1),
Inactive(2);
因为我将它与 hibernate 一起使用,并且还将其转换为 JSON 用于 alpaca js 表单。
喜欢:
["text": "Inactive", "value":"2","text": "Active", "value":"1"]
我一直在制作enum
。如何制作这种类型的enum
?
【问题讨论】:
它不是重复的,因为我使用的是休眠注释 bean,所以我需要带空格的键和值,您共享的链接使枚举具有字符串值,但它的键不是整数它也是字符串 你确定枚举是解决这个问题的唯一方法吗? 英文单词“inactive”的拼写没有空格。你确定你不能忍受使用正确的拼写吗? :-) 这真的和Hibernate无关。您不能在枚举值中包含空格,这是 Java 语言本身所禁止的。您将不得不为您未描述的用例找到另一种解决方案。 你可以通过正确的拼写来完全避免这个问题inactive 【参考方案1】:字符串之间不能有空格。您可以使用下划线代替,如下所示:
In_Active
你可以这样使用:
enum Status
ACTIVE("Active", 1), IN_ACTIVE("In Active", 2);
private final String key;
private final Integer value;
Status(String key, Integer value)
this.key = key;
this.value = value;
public String getKey()
return key;
public Integer getValue()
return value;
【讨论】:
是的,我知道我不能,但我需要它 请检查修改后的答案。 谢谢@Chandana Kumara 需要更多帮助我已经实现了它,但是休眠正在获取它的名字并显示它。 你用@Enumerated注解试试? 请参考:docs.jboss.org/hibernate/orm/5.0/mappingGuide/en-US/html_single/… 或 virgo47.wordpress.com/2014/08/02/…【参考方案2】:您可以在一个 enum
中保存多个值,甚至可以使用 getter 来处理它们。这是我曾经使用过的一个示例(我尝试使其适应您的问题):
public enum Status
ACTIVE(1, "Active"),
INACTIVE(2, "In Active");
private final Integer value;
private final String text;
/**
* A mapping between the integer code and its corresponding text to facilitate lookup by code.
*/
private static Map<Integer, Status> valueToTextMapping;
private Status(Integer value, String text)
this.value = value;
this.text = text;
public static Status getStatus(Integer i)
if(valueToTextMapping == null)
initMapping();
return valueToTextMapping.get(i);
private static void initMapping()
valueToTextMapping = new HashMap<>();
for(Status s : values())
valueToTextMapping.put(s.value, s);
public Integer getValue()
return value;
public String getText()
return text;
@Override
public String toString()
final StringBuilder sb = new StringBuilder();
sb.append("Status");
sb.append("value=").append(value);
sb.append(", text='").append(text).append('\'')
sb.append('');
return sb.toString();
因此,在您的代码中,您可以简单地使用 Status.ACTIVE
,它将代表您的 Enum 的一个实例,以您想要的方式保存 value
和 text
【讨论】:
对不起,我来晚了,没有看到 Chandana Kumara 的回答 很好,但你能帮我弄清楚为什么休眠自动生成的 bean 的名称是字符串而不是文本 我不确定您指的是哪种自动生成,但Status.ACTIVE.name()
和Status.ACTIVE.toString()
之间存在差异,甚至在此实现中Status.ACTIVE.getText()
自动生成的代码调用.name()
方法。在这种情况下,您应该更改它并致电.getText()
或更改您的toString()
(更好)
在休眠中,我们使用列表函数自动运行选择查询并使用这些值填充 bean 类列表。
很抱歉,我无法从这里进一步帮助您。如果您尝试使用这个“新”枚举实现并检查您得到的字符串可能是最好的。 .toString()
方法很可能用于将枚举转换为字符串 - 因此您可能想要覆盖该方法。【参考方案3】:
您不能在标识符中间放置空格。
查看此链接 Is it possible to assign numeric value to an enum in Java? 以将值分配给 java 中的枚举。
【讨论】:
谢谢,但它的价值没有空格 你的枚举值不都是int类型的吗? 值都是int,文本是字符串以上是关于如何在java中制作像枚举一样的键值[重复]的主要内容,如果未能解决你的问题,请参考以下文章
java问题,我想在java中存储键值对,以便使用,但是键值对的键和值都有重复元素,使用hashmap会产生覆盖。