我在Java中遇到枚举问题.我有一个枚举,从-1:
public enum AipType {
Unknown(-1),
None(0),
AipMod(1),
AipNoMod(2);
private final int id;
AipType(int id) {this.id = id;}
public int getValue() {return id;}
}
Run Code Online (Sandbox Code Playgroud)
问题是当我使用此代码初始化var的时候 AipType
AipType at = AipType.getValues()[index];
Run Code Online (Sandbox Code Playgroud)
index区间中[-1,0,1,2]的数字在哪里-1搞乱了价值.即0返回Unknown,1返回AipMod,2返回AipNoMod.
我使用了这个实现,因为我需要手动设置每个枚举案例的数值.在其他情况下,我有一个差距beetwen值,所以我有同样的问题:我不能使用values(),然后访问[ ].
我试着用这种方式初始化
AipType at = AipType(index);
Run Code Online (Sandbox Code Playgroud)
但不起作用.
想法?谢谢...
我们不知道getValues()你正在使用的方法是什么.它应该是values().
无论如何,您总是可以static在您的方法中添加一个方法enum,该方法返回该enum值的正确实例,并在您需要的任何地方调用它:
public enum AipType {
Unknown(-1),
None(0),
AipMod(1),
AipNoMod(2);
private final int id;
AipType(int id) {this.id = id;}
public int getValue() {return id;}
public static AipType fromValue(int id) {
for (AipType aip: values()) {
if (aip.getValue() == id) {
return aip;
}
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您fromValue()经常调用,您可能还希望缓存由values()内部返回的数组enum,并使用它.或者甚至更好,map一个更好的主意.
Enum.getValues() 根据枚举类中的定义顺序返回枚举数组.
getValues()不知道您添加到枚举中的id字段或getValue()方法.
你可以做什么而不是调用getValues()[-1](顺便说一句,你永远不能用Java索引数组中的数组)是添加一个静态函数,如:
static AipType getAipType(int id) {
for (AipType a : getValues()) {
if (a.getId() == id) return a;
}
throw new IllegalArgumentException("id=" + id + " does not exist");
}
Run Code Online (Sandbox Code Playgroud)
只需拥有一个Map<Integer, AipType>而不是使用values(),并通过一个方法公开对它的访问:
public enum AipType {
UNKNOWN(-1),
NONE(0),
MOD(1),
NO_MOD(2);
private static final Map<Integer, AipType> VALUE_TO_ENUM_MAP;
private final int value;
static {
VALUE_TO_ENUM_MAP = new HashMap<>();
for (AipType type : EnumSet.allOf(AipType.class)) {
VALUE_TO_ENUM_MAP.put(type.value, type);
}
}
private AipType(int value) {
this.value = value;
}
public int getValue() {
return id;
}
public static AipType forValue(int value) {
return VALUE_TO_ENUM_MAP.get(value);
}
}
Run Code Online (Sandbox Code Playgroud)
这将是关于值的完全灵活 - 或者您仍然可以使用数组并恰好抵消它.
| 归档时间: |
|
| 查看次数: |
2627 次 |
| 最近记录: |