【发布时间】:2014-10-09 00:59:39
【问题描述】:
public enum Planet {
MERCURY(false),
VENUS(false),
EARTH(false),
MARS(false),
JUPITER(false),
SATURN(false),
URANUS(false),
NEPTUNE(false);
}
public boolean isCurrent;
Planet(boolean isCurrent){
this.isCurrent = isCurrent;
}
public static void next(){
if(planet == VENUS){
VENUS.isCurrent = false;
EARTH.isCurrent = true;
MARS.isCurrent = false;
JUPITER.isCurrent = false;
SATURN.isCurrent = false;
URANUS.isCurrent = false;
NEPTUNE.isCurrent = false;
}
if(planet == EARTH){
VENUS.isCurrent = false;
EARTH.isCurrent = false;
MARS.isCurrent = true;
JUPITER.isCurrent = false;
SATURN.isCurrent = false;
URANUS.isCurrent = false;
NEPTUNE.isCurrent = false;
}
...
}
我找到了这个解决方案,
private enum Planet { MERCURY, VENUS, EARTH, MARS, JUPITER, SATURN, URANUS, NEPTUNE;
public Planet getNext() {
return this.ordinal() < Planet.values().length - 1
? Planet.values()[this.ordinal() + 1]
: null;
}
}
但我无法使用 this 因为此枚举在其他类中作为静态导入;
现在我使用跟随结构:
public static Planet setNewCurrent(){
for(Planet planet : Planet.values()){
if(planet == VENUS){
VENUS.isCurrent = false;
EARTH.isCurrent = true;
MARS.isCurrent = false;
JUPITER.isCurrent = false;
SATURN.isCurrent = false;
URANUS.isCurrent = false;
NEPTUNE.isCurrent = false;
}
if(planet == EARTH){
VENUS.isCurrent = false;
EARTH.isCurrent = false;
MARS.isCurrent = true;
JUPITER.isCurrent = false;
SATURN.isCurrent = false;
URANUS.isCurrent = false;
NEPTUNE.isCurrent = false;
}
...
}
}
有谁知道像这样getNextPlanet() 的便捷方法
planet.getNext().isCurrent = true;
【问题讨论】:
-
Java 枚举不等同于其他语言中的枚举。它们并不意味着具有特定的“顺序”,因此没有“下一个”的概念。
-
@Quirliom stackoverflow.com/questions/3820149/…
-
@Zhuiden 是的 .values 方法存在,但也使用反射,因此我认为它不是一个好方法。