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();
        }
    }