Java 如何在静态枚举中获取下一个
我找到了这个解决方案Java 如何在静态枚举中获取下一个,java,static,enums,next,Java,Static,Enums,Next,我找到了这个解决方案 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){
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;
}
...
}
有人知道这样获取NextPlanet()的便捷方法吗
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;
}
...
}
}
这不是使用枚举的正确方法。在每个枚举常量上不应该有
布尔值isCurrent
相反,在一个位置(不在枚举中)有一个Planet currentPlanet
变量:
当您想要获得下一个时,请执行以下操作:
Planet currentPlanet = Planet.MERCURY;
这不是使用枚举的正确方法。在每个枚举常量上不应该有
布尔值isCurrent
相反,在一个位置(不在枚举中)有一个Planet currentPlanet
变量:
当您想要获得下一个时,请执行以下操作:
Planet currentPlanet = Planet.MERCURY;
我希望您能意识到,您可以拥有以下内容:
currentPlanet = currentPlanet.getNext();
公共枚举行星{
水星、金星、地球、火星、木星、土星、天王星、海王星;
公共行星getNext(){
返回此.ordinal()
当然,您可以只使用switch case语句,根据字段变量中选择的值对枚举进行操作:
根本不需要布尔变量来确定哪一个是“当前选定的”
编辑:根据您的评论,您需要Planet的单实例。幸运的是,您可以使用枚举本身来实现这一点:
public 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;
}
}
private Planet planet;
public void someFunction()
{
planet = Planet.MARS;
planet = planet.getNext();
if(planet != null)
{
doStuff();
}
}
公共枚举行星{
水星、金星、地球、火星、木星、土星、天王星、海王星;
私人静态行星currentPlanet=水星;
公共静态行星getCurrentPlanet()
{
返回地球;
}
公共静态布尔setToNext(){
布尔retVal=this.ordinal()
我希望您能意识到,您可以拥有如下内容:
currentPlanet = currentPlanet.getNext();
公共枚举行星{
水星、金星、地球、火星、木星、土星、天王星、海王星;
公共行星getNext(){
返回此.ordinal()
当然,您可以只使用switch case语句,根据字段变量中选择的值对枚举进行操作:
根本不需要布尔变量来确定哪一个是“当前选定的”
编辑:根据您的评论,您需要Planet的单实例。幸运的是,您可以使用枚举本身来实现这一点:
public 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;
}
}
private Planet planet;
public void someFunction()
{
planet = Planet.MARS;
planet = planet.getNext();
if(planet != null)
{
doStuff();
}
}
公共枚举行星{
水星、金星、地球、火星、木星、土星、天王星、海王星;
私人静态行星currentPlanet=水星;
公共静态行星getCurrentPlanet()
{
返回地球;
}
公共静态布尔setToNext(){
布尔retVal=this.ordinal()
Java枚举与其他语言中的枚举不同。它们不意味着有一个特定的“顺序”,因此没有“下一个”的概念。“QuiLIOM”CUDEN是的。值方法存在,但也使用反射,因此我不认为它是一个好的做事方式。java枚举不等同于其他语言中的枚举。它们并不意味着有一个特定的“顺序”,因此没有“下一个”的概念。“QuiLiunm @ CudieNo.Yes。值方法存在,但也使用反射,因此我不认为它是一个好的方法。thx,但是一些函数()不是静态的,并且我仍然不能使用这个而不创建这个枚举的实例。这个代码示例只是所有枚举的一个片段,基于静态导入的应用程序中有太多的逻辑。Planet.MARS
是枚举的一个实例,如果你没有想法,那么Planet.values()[0]
我知道这一点,我的意思是在外部类中使用简单的构造setNext(),然后每个类,将此枚举作为静态导入的,将通过getCurrent()获取当前状态。哦,您想要枚举的单例选定字段。你可以通过制作星球来轻松破解代码>是枚举本身的字段变量,已更改的返回值()[(序号()+1)%values().length];它的工作原理类似于champ,ty.thx,但是someFunction()不是静态的,如果不创建此枚举的实例,我仍然无法使用它。这个代码示例只是所有枚举的一个片段,基于静态导入的应用程序中有太多的逻辑。Planet.MARS
是枚举的一个实例,如果你没有想法,那么Planet.values()[0]
我知道这一点,我的意思是在外部类中使用简单的构造setNext(),然后每个类,作为静态导入此枚举的,将通过getCurrent()获取当前状态。哦,您想要一个
public enum Planet {
EARTH,
MARS;
public static Planet current = EARTH;
Planet() {
}
public Planet getNext() {
return values()[(ordinal() + 1) % values().length];
}
public static void setNext(){
current = current.getNext();
}
public static Planet getCurrent(){
return current;
}
}
import static com.test.Planet.*;
public class Main {
public static void main(String[] args){
getCurrent();
setNext();
}
}