我有这个枚举:
public enum Pebble {
RAGE(NamedTextColor.DARK_RED, "Rage Wave", "Channel Rage"),
FLEET(NamedTextColor.AQUA, "Dash", "Speed Surge"),
CHARISMA(NamedTextColor.GREEN, "Charisma Aura", "Silver Tongue"),
STEALTH(NamedTextColor.DARK_PURPLE, "Flashbang", "Smoke Bomb"),
MOLTEN(NamedTextColor.GOLD, "Fireball", "Flame Touch"),
STEEL(NamedTextColor.DARK_GRAY, "Iron Skin", "Steel Buddy"),
ROLL(NamedTextColor.YELLOW, "", "");
public final NamedTextColor color;
public final String primary;
public final String secondary;
Pebble(@NotNull NamedTextColor color, @NotNull String primary, @NotNull String secondary) {
this.color = color;
this.primary = primary;
this.secondary = secondary;
}
}
我需要使用primary和secondary字符串来使用这个switch-case语句获得不同的输出:
switch(abilityName) {
case Pebble.RAGE.primary -> {...}
case Pebble.RAGE.secondary -> {...}
...
}
但是因为这些值在编译时没有初始化为常量,所以我得到一个错误。
我看到一个帖子,建议在枚举中添加这样的东西:
public static Pebble byName(String abilityName) {
for (Pebble value : values()) {
if(value.primary.equals(abilityName) || value.secondary.equals(abilityName)) {
return value;
}
}
return null;
}
然后对于开关的情况你可以这样做:
Pebble pebble = Pebble.byName(abilityName);
switch (pebble) {
case RAGE -> {...}
case FLEET -> {...}
...
}
但这对我不起作用,因为我需要每个卵石2个不同的输出。
无论我怎么绞尽脑汁也想不出一个好的解决办法,有什么建议吗?
1条答案
按热度按时间7tofc5zh1#
可能有更好的方法来设计对象。
这里有一个替代方案。
然后,创建两个方法,其中一个返回 Pebble,并给出单独的评估。
然后,只要检查它是哪一个 * 卵石 *,第一。