【发布时间】:2021-09-07 20:13:35
【问题描述】:
我有一个枚举器,它接受一个 int 和一个字符串作为字段。这些可以通过静态方法或直接从枚举器“实例”访问(不熟悉此的正确措辞)。这就是我的意思:
public enum CreatureType {
POKE_PIG(1, "Piggley"), POKE_COW(2, "Cowbert");
private int number;
private String name;
CreatureType(int number, String name) {
this.number = number;
this.name = name;
}
public int getNumber() {
return number;
}
public String getName() {
return name;
}
public static String getName(CreatureType type) {
return type.getName();
}
public static int getNumber(CreatureType type) {
return type.getNumber();
}
但现在我需要从它的 int 中获取一个 CreatureType。所以这是我写的伪代码,这是我对如何做到这一点的最佳猜测:
public static CreatureType getCreatureType(int number) {
switch (number) {
case 1:
return CreatureType.POKE_PIG;
case 2:
return CreatureType.POKE_COW;
default:
break;
}
return null;
}
这感觉很奇怪。我不喜欢这种技术,即使理论上它应该有效,但我觉得必须有更好的方法来做到这一点。我没有将这些枚举存储在列表或集合或任何东西中,所以我无法遍历它们,我只是在寻找正确的方法来获取它。
【问题讨论】:
-
每个
Enum-value 都有一个隐含的int-value,尽管我可以理解在这种情况下不想使用它。 --- 我们可以使用Stream-operations 来获得具有给定number的CreatureType:Arrays.stream(CreatureType.values()).filter(creature -> creature.getNumber() == number).findAny();。这将返回一个Optional<CreatureType>,如果没有找到具有给定编号的生物,则该Optional<CreatureType>为空,否则返回非空Optional。