获取枚举实例 [重复]
Posted
技术标签:
【中文标题】获取枚举实例 [重复]【英文标题】:Get Enum instance [duplicate] 【发布时间】:2016-08-28 17:48:08 【问题描述】:我有一个Enum
:
public enum Type
ADMIN(1),
HIRER(2),
EMPLOYEE(3);
private final int id;
Type(int id)
this.id = id;
public int getId()
return id;
如何通过 id
属性获得 Type
枚举?
【问题讨论】:
您可以迭代Type
值并查找您的id
;或填写Map<Integer, Type>
。
This might be exactly what you need.(除了你有一个int id
而不是String text
。
【参考方案1】:
在Type
类中创建一个返回Enum
实例的方法:
Type get(int n)
switch (n)
case 1:
return Type.ADMIN;
case 2:
return Type.EMPLOYEE;
case 3:
return Type.HIRER;
default:
return null;
提示:您需要在switch-case
中添加default
或在方法末尾添加return null
以避免编译器错误。
更新(感谢@AndyTurner):
最好循环引用 id 字段,这样就不会重复 ID。
Type fromId(int id)
for (Type t : values())
if (id == t.id)
return t;
return null;
【讨论】:
最好循环引用id
字段,这样就不会重复ID。
@AndyTurner 更新了答案......但是......为什么你说我在复制身份证?我错过了什么?或者你的意思是每个id写一行??
@brimborium 是的,但那是彼得的回答......
@JordiCastilla 我刚看到。 ;)
注意:每次调用 values()
时,它都会创建一个新的枚举值数组。它必须这样做,因为它不知道你是否要对其进行变异。【参考方案2】:
您可以构建一个地图来进行此查找。
static final Map<Integer, Type> id2type = new HashMap<>();
static
for (Type t : values())
id2type.put(t.id, t);
public static Type forId(int id)
return id2type.get(id);
【讨论】:
我最喜欢这个解决方案。它很干净,对于任意大的枚举具有最佳性能。【参考方案3】:试试这个。我创建了一个使用 id 搜索类型的方法:
public static Type getType(int id)
for (Type type : Type.values())
if (id == type.getId())
return type;
return null;
【讨论】:
以上是关于获取枚举实例 [重复]的主要内容,如果未能解决你的问题,请参考以下文章